如何在执行下一条指令 Flutter 之前完成异步 Future 任务



我对我的数据库进行了函数调用,该函数在获取数据后更新本地对象并花费一些时间。

由于异步任务,程序将移动到下一行代码。 不幸的是,我需要使用下一行代码的异步调用更新的本地对象。

在执行下一段代码之前,如何等待异步任务完成? 谢谢

编辑:添加代码以解释

updateUser() {
return FutureBuilder(
future: updateUserData(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return Text("hello not");
} else {
return Text('Hello!');
}
},
);}
@override
Widget build(BuildContext context) {
switch (_authStatus) {
case AuthStatus.notSignedIn:
return new LoginPage(
auth: auth,
CurrentUser: CurrentUser,
onSignedIn: _signedIn,
);
case AuthStatus.signedIn:
{
updateUser(); //THIS TAKES A COUPLE SECONDS TO FINISH BUT I NEED TO SEND IT TO THE NEXT PAGE
return new HomePage(
auth: auth,
CurrentUser: CurrentUser,
onSignedOut: _signedOut,
);
}
}
}
}

您可以在async函数中使用await关键字。

例如:

void someFunc() async {
await someFutureFunction();
// Your block of code
}

在这里,你的代码块不会运行,直到某个FutureFunction返回一些东西。

您还可以使用自定义异步函数,如以下示例所示:

(() async {
await restApis.getSearchedProducts(widget.sub_cats_id,widget.keyword).then((val) => setState(()
{
setState(() {
data = val["data"];
});
}));
})();

这可能会有所帮助, 下面的示例代码有两个函数, 以下函数用于加载资产并返回 JSON 内容。

Future<String> _loadCountriesAsset() async {
return await rootBundle.loadString('assets/country_codes.json');
}

另一个函数将使用 JSON 内容并将格式转换为模型并返回到类。

Future<List<CountryCode>> loadCountryCodes() async {
String jsonString = await _loadCountriesAsset();
final jsonResponse = json.decode(jsonString);
// print(jsonResponse);
CountriesCodeList countriesCodeList =
new CountriesCodeList.fromJson(jsonResponse);
// print("length " + countriesCodeList.codes.length.toString());
return countriesCodeList.codes;
}

类中的用法,定义了从services.dart文件调用loadCountryCodes((函数的方法。

Future getCountryCodes() async {
var countryCodesList = await loadCountryCodes();
print("**** length " + countryCodesList.length.toString());
// Perform the operations, or update to the UI or server. It should be same for API call as well. 
}

希望这有帮助。

最新更新