代码之家  ›  专栏  ›  技术社区  ›  Mehmet Özkan

Dart将映射列表转换为JSON[重复]

  •  0
  • Mehmet Özkan  · 技术社区  · 1 年前

    我想打印一条短信,但我只是打印“…的实例”

    这是一款应用程序,可以在显示屏上显示智能手机中的所有短信

    我正在使用短信插件

    class _HomeState extends State<Home> {
    
    
      Future<List> getSMS() async {
    
    
      SmsQuery query = new SmsQuery();
      List<SmsMessage> messages = await query.getAllSms;
    
    
    
      return messages;
    }
    
      @override
        void initState() {
        super.initState();
    }
    
    
    
    
    @override
      Widget build(BuildContext context) {
        return new Scaffold(
          body: FutureBuilder<List>(
          future: getSMS(),
          builder: (context, snapshot) {
           switch(snapshot.connectionState){
            case ConnectionState.none:
            case ConnectionState.waiting:
    
            default:
                if(snapshot.hasError){
                  return new Center(
                      child: Text("Erro ao Carregar Dados :(",
                        style: TextStyle(
                            color: Colors.black,
                            fontSize: 25.0),
                        textAlign: TextAlign.center,)
                  );
                } else {
                debugPrint(snapshot.data[0].toString());
              }
          }
            return new Center(
              child: Text(snapshot.data[0].toString(),
              style: TextStyle(
                color: Colors.black,
                fontSize: 25.0),
                 textAlign: TextAlign.center,)
              );
           },
         ),
       );
     }
    }
    

    我只需要在显示器上打印短信,但我不知道如何在dart中打印对象的实例

    0 回复  |  直到 5 年前
        1
  •  4
  •   Somwang Souksavatd    3 年前

    使用 .toJson() 而不是 .toString()

        2
  •  2
  •   Adrian Murray    5 年前

    您只能打印字符串(因为打印控制台就是这样做的)。如果一个类没有 toString() 方法,然后你需要弄清楚字符串在哪里 SmsMessage 有一个 body 参数,它是一个字符串。由于您有SmsMessages的列表,您需要在forLoop中迭代它们,并打印它们的后续 身体 参数。要打印您可以执行的第一条消息 print(messages.first.body)

        3
  •  1
  •   Pablo Barrera    5 年前

    如果要在控制台中打印所有消息:

    print(snapshot.data.map((message) => message.body));
    

    如果要在控制台中打印第一条消息:

    print(snapshot.data.first.body);
    

    如果你想在 Text widget所有消息:

    Text('${snapshot.data.map((message) => message.body)}')
    

    如果你想在 文本 窗口小部件显示第一条消息:

    Text('${snapshot.data.first.body}')
    

    如果要显示 文本 具有所有消息的小部件:

    Column(
      children: snapshot.data.map((message) => Text('${message.body}')).toList(),
    )