有人能帮我理解这段代码吗:
String? userName = "";
String? userEmail = "";
AuthService authService = AuthService();
@override
void initState() {
// TODO: implement initState
super.initState();
gettingUserData();
}
定义gettingUserData()时,使用异步,await需要hotreload来显示电子邮件
gettingUserData() async {
setState(() async {
userName = await HelperFunction.getUsername();
userEmail = await HelperFunction.getUseremail();
});
}
但是用.则定义它不需要热重
gettingUserData() {
HelperFunction.getUseremail().then((value) {
setState(() {
userEmail = value;
});
});
HelperFunction.getUsername().then((value) {
setState(() {
userName = value;
});
});
}
有谁能帮我理解这是为什么吗?
1条答案
按热度按时间slhcrj9b1#
这两个版本不等同。
Future.then
版本在每个Future
完成 * 之后 * 调用setState
。await
版本使用异步回调调用setState
,这是setState
所不期望的。由于setState
expects aVoidCallback
argument,它期望其回调同步完成,因此它不会被await
编辑。因此,setState
在等待Future
完成之前 * 立即 * 执行并返回。纠正
await
版本的一种方法是 * 先 * 将await
修改为Future
,然后调用setState
: