有啥方法可以用 Provider 在 Flutter 中全局登录学生吗?
Posted
技术标签:
【中文标题】有啥方法可以用 Provider 在 Flutter 中全局登录学生吗?【英文标题】:Are there any methods toglobally login student in Flutter with Provider?有什么方法可以用 Provider 在 Flutter 中全局登录学生吗? 【发布时间】:2020-09-23 13:40:35 【问题描述】:我有一个与我的 API 连接的应用程序,每当我登录时,令牌都会存储到 Shared Preferences,并且可以进一步自动登录。每当应用程序重新加载时,我都会使用存储在 SharedPrefs 中的令牌登录,但是当主屏幕加载时,我请求获取从我的 API "api/me"
它将存储的令牌发送到服务器,它返回给我带有该令牌的用户。但我还实现了深色主题切换器,它的值在 SharedPrefs 中的 true
和 false
之间切换。我在应用程序抽屉中显示的数据(如用户名和照片)突然消失了,但是当我再次进入主屏幕(应用程序向服务器发送请求)时,它又开始工作了。
如何从数据库中获取值并存储它,保持从每个小部件的访问。我正在使用提供程序。
代码如下:
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();
【问题讨论】:
【参考方案1】:您可以创建 ChangeNotifier 来存储有关应用程序全局状态的详细信息,如下所述:暗模式、api 令牌等。您可以使用 ChaneNotifierProvider 在 main 方法中的应用程序小部件上方的应用程序级别注入它。
现在,您最初需要将用户的登录状态保存在共享首选项中,因为提供程序仅在运行时才会存在于应用程序范围内。
因此,一旦应用加载,只需根据共享首选项更新 ChangeNotifier(只需一次),更改就会每次都得到反映,并且可以在应用中的任何位置使用
【讨论】:
以上是关于有啥方法可以用 Provider 在 Flutter 中全局登录学生吗?的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2-7 中的 PROVIDER、INJECTOR 和 SERVICE 有啥区别?
Flutter 中的 Bloc Provider 和 Normal Provider 有啥区别?
Android 的 Fused Location Provider 的 LocationRequest 优先级有啥区别?