您可以使用Flutter将对象作为消息“发送”到compute()吗?

时间:2020-07-28 13:01:27

标签: flutter dart dart-isolates

所以我基本上有一个带有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发送,创建一个新的对象并返回?

1 个答案:

答案 0 :(得分:1)

根据docs

消息的内容可以是:原始值(null,num,bool,double,String),SendPort的实例以及元素为这些元素的列表和映射。列表和地图也可以循环。

所以我看到了两个可以使用的选项。

  1. 如果可以这样解构对象,则可以在MapList中以整数或其他基元形式发送每个值。
  2. 如果该方法由于某种原因太困难,则可以将对象转换为原始类型,最简单的方法是使用JSON编码的String。您可以使用jsonEncode函数对对象进行编码,然后将其返回的String发送到隔离区,然后在必要时将其解码回对象。
相关问题