我有一个应用程序,它与我的API连接,每当我登录token存储到共享的首选项和进一步的自动登录是可行的。"api/me"
它将存储的token发送给服务器,然后用该token返回我的用户。但我也实现了暗色主题切换器,它的值可以在以下两种情况下切换 true
和 false
在SharedPrefs中。我在应用程序抽屉中显示的数据(如用户名和照片)突然消失,但当我再次进入主屏幕时(应用程序向服务器发送请求),它又出现了工作。
如何从DB中获取值并将其存储,保持每个widget的访问。我使用的是Provider。
下面是代码。
String token;
Future<Student> setStudent() async {
try{
final url = "https://myapi/me";
Response res = await post(Uri.encodeFull(url), body:{'token': token});
json.decode(res.body);
} catch (e){
print(e);
}
notifyListeners();
}
}
我在我的主屏幕上使用它。
@override
void didChangeDependencies() {
if (_isInit) {
setState(() {
_isLoading = true;
});
Provider.of<StudentData>(context).setStudent().then((std) {
setState(() {
_isLoading = false;
student = std;
});
});
}
_isInit = false;
super.didChangeDependencies();
}
你可以创建ChangeNotifier,存储有关应用程序全局状态的详细信息,如所述:黑暗模式,api token等。你可以使用ChaneNotifierProvider在应用程序级别的主方法中的应用程序widget上面注入这个。
现在,最初你需要将用户的登录状态保存在共享的偏好设置中,因为provider只在应用运行时存在于应用范围内。
因此,一旦应用程序加载,只需根据共享偏好更新ChangeNotifier(只需要一次),变化将被反映出来,它将在应用程序的任何地方使用。