首页 > 解决方案 > 如何使用方法通道将任何 T 类型的列表从 Android 发送到 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 模型。

标签: dartflutter

解决方案


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

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

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

  • 地图 - 您可以将每个对象转换为字符串值对的地图(这些值需要是可接受的类型之一 - 请参阅上面的链接)并发送地图列表。


推荐阅读