是否可以在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? 谢谢!
答案 0 :(得分:1)
与explained in the documentation一样,否-您无法向[ amp-script ] amp-script[script="navToggleScript"].js could not find element with # navToggleScript . error.js:195:8
函数发送BuildContext
,即,另一个compute
(Isolate
仅是简单隔离的包装)。
可与隔离之间发送和接收的值受到限制。这些限制限制了可能的Q和R值。请参见SendPort.send上的讨论。
compute
是message
的值(Q
是返回值),因此受到以下限制:
R
的内容可以是:原始值(null,num,bool,double,String),SendPort的实例以及元素为这些元素中的任何一个的列表和映射。列表和地图也可以循环。
如果您想全面了解有关隔离株的信息,Flutter团队会发布video about working with Isolate
s in Flutter。他们还解释了隔离株如何在较低的层次上发挥作用,这可能有助于您理解为什么存在这些限制。