如何通过使用方法通道将任何T类型的列表从Android发送到Flutter端?

时间:2019-04-23 18:20:13

标签: dart flutter

我想从本地到Flutter检索一些带有其他信息的联系人,例如姓名和ID。但是不允许使用任何自定义类型的列表。 有人可以建议解决方案吗??

在Android方面---

 if (methodCall.method.equals("fetch_contacts")) {
        List<Contact> contactList = getContacts();
        result.success(contactList);
 } else {
        result.notImplemented();
  }

在颤振侧上-

List<dynamic> contactsList = await methodChannel.invokeListMethod('fetch_contacts');

上面的android辅助代码给出了IllegalStateException,因为它无法发送Contact模型。

1 个答案:

答案 0 :(得分:0)

Contact是一个Java对象,因此不能跨方法通道发送。在Dart端会变成什么?您可以创建一个Dart类,也称为Contact,但是即使这样您也无法发送它。您需要定义一种将对象序列化/反序列化为遍历方法通道的部分的方法。 (有关可以交叉的基本对象,请参见StandardMessageCodec。)

以下是一些可能的方法来序列化对象:

  • JSON-您可以将其转换为Java中的JSON,在方法通道中发送字符串列表,然后将这些字符串解码为Dart对象列表。 (或发送一个表示对象列表的JSON字符串。)

  • 地图-您可以将每个对象转换为字符串-值对的地图(值必须是一种可接受的类型-请参见上面的链接)并发送地图列表。