use*_*654 7 dart dart-isolates flutter
是否可以在计算函数中使用 BuildContext ?
Future<int> getFuture() async {
int r = await compute(count, context);
return r;
}
static int count(BuildContext context) {
// Something very slow.
return 10;
}
Run Code Online (Sandbox Code Playgroud)
尝试传递contextto时收到以下错误compute:
I/flutter ( 8764): AsyncSnapshot<int>(ConnectionState.done, null, Invalid argument(s): Illegal argument in isolate message : (object is a closure - Function '_handleBuildScheduled@374399801':.))
Run Code Online (Sandbox Code Playgroud)
如果我将 count 函数的输入更改为其他普通类,它就可以正常工作。
有没有什么办法解决这一问题?或者可以在Isolate中使用 BuildContext 吗?谢谢!
正如文档中所解释的,不 - 您不能将 a 发送BuildContext到compute函数,即另一个函数Isolate(compute只是简单隔离的包装器)。
可以向隔离区发送和从隔离区接收的值存在限制。这些限制限制了 Q 和 R 的可能值。请参阅SendPort.send中的讨论。
是(是返回值)message的值,因此受到以下限制:QR
的内容
message可以是:原始值(null、num、bool、double、String)、SendPort的实例以及其元素为其中任何一个的列表和映射。列表和映射也允许是循环的。
如果您想了解有关隔离的更多信息,Flutter 团队发布了有关在 Flutter 中使用 s 的视频Isolate。他们还解释了隔离如何在较低级别上工作,这可能有助于您理解为什么存在这些限制。
| 归档时间: |
|
| 查看次数: |
2195 次 |
| 最近记录: |