dart - 如何使用方法通道将任何 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 模型。
解决方案
Contact
是一个 Java 对象,因此不能通过方法通道发送。在 Dart 结束时它会变成什么?您可以创建一个 Dart 类,也称为Contact
,但即便如此您也无法发送它。您需要定义一种将对象序列化/反序列化为将遍历方法通道的部分的方法。(有关可以交叉的基本对象,请参阅StandardMessageCodec。)
以下是序列化对象的一些可能方法:
JSON - 您可以将其转换为 Java 中的 JSON,通过方法通道发送字符串列表,然后将这些字符串解码为 Dart 对象列表。(或发送一个表示对象列表的 JSON 字符串。)
地图 - 您可以将每个对象转换为字符串值对的地图(这些值需要是可接受的类型之一 - 请参阅上面的链接)并发送地图列表。
推荐阅读
- arrays - 如何使用 if 语句转发数组值返回 false?
- c# - Angular 7 和 ASP.NET MVC 集成 - 样式
- c - 一种改变 GTK+ 主题路径的方法?
- kubernetes-helm - 错误:requirements.lock 与 requirements.yaml 不同步
- python - 使用 Glob 将文件夹内具有部分名称的文件名获取到列表中
- r - 使用 RDCOMClient 搜索 Outlook 收件箱
- groovy - Jenkins returns null instead of error in output
- reactjs - React Webpack:TypeError:react__WEBPACK_IMPORTED_MODULE_7___default.a.createContext
- android - Room @Relation using a composite index
- r - Changing ae, oe, ue into umlaut