在 flutter 中执行异步代码时出现问题

Problem when executing an asynchronous code in flutter

谁能帮我看看 asyncawait 是如何工作的?程序在调用 rawQuery(...) 时抱怨 dbnull。我的理解是 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);
}

dbdb.rawQuery(...) 中的 null。 (我希望你明白我的意思)。我不知道是否可以将 return Scaffold() 放在 then(...) 中,或者 Widget build() {...} 是否可以等到所有数据都准备好。

编辑:抱歉,我没有注意到您正在使用小部件的构建方法。

首先,如果您在此处调用您的数据库,您将在每次 重新构建小部件时调用您的数据库。这不是一个好习惯。您需要在其他地方实例化您的数据库(例如在服务中)。加载数据后,您可以在此处调用它。

其次,如果你想显示来自 Future 的数据。正如@jamesdlin 所说,您需要使用 FutureBuilder