如何解决在flutter中执行异步代码时出现的问题
谁能帮我async
和await
是如何工作的?程序在调用 db
时抱怨 null
是 rawQuery(...)
。我的理解是当 await
函数尚未完成时,await
之后的下一个语句不会被执行,但是 async
函数之后的语句不会等待该函数执行完成它的工作。例如:
var db;
Widget build(BuildContext context) {
...
List<Map<String,Object>> resultSet;
asyncFunction();
db.rawQuery(...).then((value) => resultSet = value);
return Scaffold(
appBar: AppBar(...),child: Text()
);
}
void asyncFunction() async {
String dbPath = await getDatabasesPath();
String path = join(dbPath,'sample.db');
db = await openDatabase(path);
}
db
在 null
中是 db.rawQuery(...)
。 (我希望你明白我的意思)。我不知道是否可以将 return Scaffold()
放入 then(...)
或 Widget build() {...}
是否可以等到所有数据准备就绪。
解决方法
编辑:抱歉,我没有注意到您在小部件的构建方法中。
首先,如果您在此处调用您的数据库,您将每次调用您的数据库重新构建您的小部件。这不是一个好习惯。您需要在其他地方(例如在服务中)实例化您的数据库。加载数据后,您可以在此处调用它。
其次,如果您想显示来自 Future 的数据。正如@jamesdlin 所说,您需要使用 FutureBuilder。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。