我可以通过BuildContext进行计算吗?

时间:2019-11-10 19:50:07

标签: flutter dart dart-isolates

是否可以在compute函数中使用BuildContext?

Future<int> getFuture() async {
  int r = await compute(count, context);
  return r;
}

static int count(BuildContext context) {
  // Something very slow.
  return 10;
}

尝试将context传递到compute时收到以下错误:

I/flutter ( 8764): AsyncSnapshot<int>(ConnectionState.done, null, Invalid argument(s): Illegal argument in isolate message : (object is a closure - Function '_handleBuildScheduled@374399801':.))

如果我将count函数的输入更改为其他普通类,则可以正常工作。

有什么办法可以解决这个问题? 还是可以在Isolate中使用BuildContext? 谢谢!

1 个答案:

答案 0 :(得分:1)

explained in the documentation一样,否-您无法向[ amp-script ] amp-script[script="navToggleScript"].js could not find element with # navToggleScript . error.js:195:8函数发送BuildContext,即,另一个computeIsolate仅是简单隔离的包装)。

  

可与隔离之间发送和接收的值受到限制。这些限制限制了可能的Q和R值。请参见SendPort.send上的讨论。

computemessage的值(Q是返回值),因此受到以下限制:

  

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


如果您想全面了解有关隔离株的信息,Flutter团队会发布video about working with Isolates in Flutter。他们还解释了隔离株如何在较低的层次上发挥作用,这可能有助于您理解为什么存在这些限制。