flutter - Flutter 你可以用compute()将对象作为消息“发送”吗?
问题描述
所以我基本上有一个带有update()
方法的简单类。但是因为这种update()
方法会进行一些数学运算,所以我想用compute()
它来让它在另一个Isolate
. 计划是在 中运行该update()
方法Isolate
并返回更新后的对象,如下所示:
compute(updateAsset, asset).then((value) => asset = value);
Asset updateAsset(Asset asset) {
asset.update();
return asset;
}
但后来我得到这个错误:
ArgumentError (Invalid argument(s): Illegal argument in isolate message : (object extends NativeWrapper - Library:'dart:ui' Class: Path))
是否有任何可能的方法将对象发送到一个,Isolate
或者我必须将它的每个值Asset
作为一个发送Integer
,创建一个新对象并返回它?
解决方案
根据文档:
消息的内容可以是:原始值(null、num、bool、double、String)、SendPort 的实例,以及元素是这些中的任何一个的列表和映射。列表和映射也可以是循环的。
因此,我看到了您可以使用的 2 个选项。
- 您可以将每个值作为整数或其他原语发送,
Map
或者List
如果您的对象可以这样解构。 - 如果该方法因任何原因太难,您可以将对象转换为原始类型,最简单的方法是
String
使用 JSON 编码。您可以使用该jsonEncode
函数对您的对象进行编码,并将String
其返回到您的隔离区,然后在必要时将其解码回您的对象。
推荐阅读
- c# - ASP.Net Core Web API 如何调用存储过程并返回 1 个结果对象
- sql - 为 BigQuery 中的每一天定义虚拟列
- javascript - 节点 js 和图表 js 的 ejs 对象存在问题
- ios - 如何在 Firestore 中获取文档密钥
- ruby-on-rails - 使用 mysql 数据库设计可跟踪的迁移错误
- amazon-web-services - 有没有其他方法可以使用 docker 容器安装亚马逊 S3 存储桶
- php - 将 nextjs 应用程序转换为 wordpress 简码
- node.js - 如何使用 tsserver + JSDoc 扩展 express.Request?
- c# - .NET 中所有可能引发的 XmlSchemaExceptions 的列表在哪里?
- javascript - 将状态从孩子传递给父母