flutter开发Invalid argument(s): Illegal argument in isolate message: object is unsendable - Library:'dart:async' Class

Invalid argument(s): Illegal argument in isolate message: object is unsendable - Library:'dart:async' Class

1. 问题原因:

使用flutter isolate的时候新开的isolate访问了其他isolate的变量导致的
比如下面例子是错误的写法:

final zhangsan = "张三"; // 这里变量是 主隔离区 声明的变量
//run方法在新开的isolate(compute新开的 子隔离区 )中运行,不是在 主隔离区 运行
void run(String name){
  debugPrint(zhangsan);  //这里是 子隔离区,使用 主隔离区 的变量zhangsan,导致了object is unsendable错误
}
compute(run,"");//compute会新开一个isolate(这里称为 子隔离区)执行run方法

1. 解决方法:

在子隔离区的方法,不能直接访问主隔离的变量的,但是compute方法不是有个传递参数的地方吗?我们只能通过传参的方式把需要访问的变量传递过去给子隔离区的方法使用
比如下面例子是正确的写法:

final zhangsan = "张三"; // 这里变量是 主隔离区 声明的变量
//run方法在新开的isolate(compute新开的 子隔离区 )中运行,不是在 主隔离区 运行
void run(String name){
  debugPrint(name);  //这里是 子隔离区,不能直接使用 主隔离区 的zhangsan ,但是可以访问主隔离区传递过来的变量name
}
compute(run,zhangsan);//compute会新开一个isolate(这里称为 子隔离区)执行run方法,这里同时将 主隔离区 的变量zhangsan传递过去
posted @   yongfengnice  阅读(323)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2021-09-09 android开发jni开发遍历文件夹下的文件以及目录
2020-09-09 android开发文字转bitmap的实现
点击右上角即可分享
微信分享提示