【问题标题】:How to make "compute()" function insert data to sqlite while in isolated process?如何使“compute()”函数在隔离过程中向sqlite插入数据?
【发布时间】:2021-12-15 22:46:16
【问题描述】:

我正在开发 Flutter 应用程序,该应用程序将 php apis 用于服务器,将 sqlite 用于本地数据。 问题在于“计算()”。 这是解释:

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

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

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);

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

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

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

【问题讨论】:

  • 我想做同样的工作,但使用 Java。怎么样?

标签: flutter dart sqflite dart-isolates null-check


【解决方案1】:

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

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

你可以在When should I use a FutureBuilder?查看这个问题和答案

【讨论】:

  • 我编写了我尝试使用它们的解决方案。如果有人知道更好的解决方案或有效的答案,他/她可以使我们受益。
猜你喜欢
  • 2012-08-05
  • 2019-06-21
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多