gpt4 book ai didi

flutter - 等待future.then()完成- flutter

转载 作者:行者123 更新时间:2023-12-03 03:38:45 29 4
gpt4 key购买 nike

我有下面的功能应返回SharedPreference实例:

SharedPreferences get sp {
Future<SharedPreferences> prefs = SharedPreferences.getInstance();
SharedPreferences temp;
prefs.then((value) { temp = value; });
return temp; //This is running immediately before completion and returning null
}

我来自iOS背景。有DispatchGroup可以帮助我们解决相同的问题:
SharedPreferences get sp {
Future<SharedPreferences> prefs = SharedPreferences.getInstance();
SharedPreferences temp;
//dispatchGroup.enter()
prefs.then((value) {
temp = value;
//dispatchGroup.leave()
});
//dispatchGroup.wait()
return temp; //This is running immediately before completion
}

我们如何才能使future.then()等待其完成,然后将控制权传递给下一行?在flutter中是否有类似于iOS的DispatchGroup的东西?

更新:

我正在寻找一种获取SharedPreferences实例的方法,以便在下面的示例中使用它:
bool get isLoggedIn => sp.getBool('IsLoggedIn');
set isLoggedIn(bool loggedIn) => sp.setBool('IsLoggedIn', loggedIn);

String get userPhone => sp.getString('UserPhone');
set userPhone(String phone) => sp.setString('UserPhone', phone);

更新2

到目前为止,下面是用于管理整个应用程序中的SharedPreferences的完整类:
class UserDefaults
{
SharedPreferences sp;

//Singleton
UserDefaults._internal();
static final UserDefaults _instance = UserDefaults._internal();
factory UserDefaults() {
_instance.initPreferences();
return _instance;
}

initPreferences() async {
sp = await SharedPreferences.getInstance();
}

/*
SharedPreferences get sp {
Future<SharedPreferences> prefs = SharedPreferences.getInstance();
SharedPreferences temp;
prefs.then((value) { temp = value; });
return temp;
}
*/

bool get isLoggedIn => sp.getBool('IsLoggedIn');
set isLoggedIn(bool loggedIn) => sp.setBool('IsLoggedIn', loggedIn);

String get userPhone => sp.getString('UserPhone');
set userPhone(String phone) => sp.setString('UserPhone', phone);
}

好了,当从main()函数调用UserDefaults()。isLoggedIn时出现错误:'null调用了'getBool'。我猜是因为initPreferences需要一些时间。

最佳答案

将代码放入异步功能:

SharedPreferences sp

loadPrefs() async {
sp = await SharedPreferences.getInstance();
}

bool get isLoggedIn => sp.getBool('IsLoggedIn');
set isLoggedIn(bool loggedIn) => sp.setBool('IsLoggedIn', loggedIn);

String get userPhone => sp.getString('UserPhone');
set userPhone(String phone) => sp.setString('UserPhone', phone);


在初始化时调用loadPrefs()

关于flutter - 等待future.then()完成- flutter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851564/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com