如何使用flutter获取手机消息

how to get mobile messages using flutter

我必须从手机接收消息,所以我使用 this plugin。它正在工作,但我没有收到任何消息,只是在控制台中打印结果 Instance of 'SmsMessage',但我完成了文档示例中指定的所有操作。我做错了吗?

源代码

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:sms/sms.dart';

class MessagesScreen extends StatefulWidget {
  MessagesScreen({Key key}) : super(key: key);

  @override
  _MessagesScreenState createState() => _MessagesScreenState();
}

class _MessagesScreenState extends State<MessagesScreen> {
  List _allMessages;
  @override
  void initState() {
    super.initState();

    getAllMessages();
  }

  Future getAllMessages() async {
    SmsQuery query = new SmsQuery();
    List<SmsMessage> messages = await query.getAllSms;
    debugPrint("Total Messages : " + messages.length.toString());
    print(messages);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Messages"),
      ),
      body: ListView.builder(
        itemCount: 1,
        itemBuilder: (BuildContext context, int index) {
          return Text("Test");
        },
      ),
    );
  }
}

您描述的行为实际上是正常的。消息将作为 SmsMessage class.

的实例返回

当您尝试打印对象时,它被转换为字符串。默认情况下,toString 方法将显示 Instance of "Class name";在您的情况下,这就是您获得该输出的原因,您正在尝试打印对象列表。

如果对于每条消息,您都希望显示正文,此代码段应该可以帮助您:

Future getAllMessages() async {
    SmsQuery query = new SmsQuery();
    List<SmsMessage> messages = await query.getAllSms;
    debugPrint("Total Messages : " + messages.length.toString());
    messages.forEach((element) { print(element.body); });
}

这与 SMS 消息无关,您只是无法以这种方式打印自定义对象列表。

循环遍历列表并打印要打印的每条消息的 属性。就像您必须处理任何其他复杂对象一样。