如何让 "compute()" 函数在隔离进程中向 sqlite 插入数据?

How to make "compute()" function insert data to sqlite while in isolated process?

我正在开发 flutter 应用程序,它使用 php apis 作为服务器,使用 sqlite 作为本地数据。 问题在于“compute()”。 这是解释:

我有三个函数从服务器上的 api 接收数据,然后将数据添加到我的本地数据库 (sqlite) table。

第一个从服务器获取数据的函数。

Future<List<Map<String, dynamic>>> getServerData(int vers)async {
//my code
 }

将数据插入本地数据库的第二个函数:

Future<int> addNewData(List<Map<String, dynamic>>)async {
 //my code
 }

调用第一个和第二个函数的第三个函数:

Future<bool> checkServerData(int vers)async {
 List<Map<String, dynamic>> sdt= await getServerData(vers);
 int res=await addNewData(sdt);
 if(res>0) return true;
 else return false;
}

我想在计算函数中调用第三个函数:

compute(checkServerData, 2);

我什么时候发现这个错误的: 用于空值的空检查运算符。

注意*: 如果我在不调用本地数据库的情况下使用它,它会很好用。 调用数据库插入数据时出现错误

当我搜索这个问题时,我发现它不允许从另一个线程访问一个线程中生成的任何资源。但是我不明白到底如何解决它或如何使用另一种方式来实现同样的想法。

搜索指定的问题后,我找到了这些解决方法:

1:如果进程在后台工作非常重要,您可以使用 Isolate 包 类 和允许所有隔离进程或上下文在它们之间共享数据作为消息发送和接收的功能。但是对于 flutter 和 dart 的初学者来说,理解这些东西是一件复杂的事情,除了那些了解在其他环境中使用线程的人。

至此,我将在此处列出一些链接: 用于 flutter 和 pub 文档的那些:

https://api.flutter.dev/flutter/dart-isolate/dart-isolate-library.html

https://api.flutter.dev/flutter/dart-isolate/Isolate-class.html

https://pub.dev/packages/flutter_isolate

这是 medium.com 网站中的示例:

https://medium.com/flutter-community/thread-and-isolate-with-flutter-30b9631137f3

2:如果进程对后台工作不重要,则第二种解决方案:

使用传统方法,例如 Future.builder 或 async/await。 你可以在这里了解更多关于它们的信息:

https://www.woolha.com/tutorials/flutter-using-futurebuilder-widget-examples

https://dart.dev/codelabs/async-await

您可以在

中查看此问题和答案