有没有什么方法可以在Flutter中使用Provider全局登录学生?

5sxhfpxr  于 11个月前  发布在  Flutter
关注(0)|答案(1)|浏览(151)

我有一个与我的API连接的应用程序,每当我登录令牌存储到共享首选项,并进一步自动登录是可能的。每当应用程序重新加载我登录与令牌存储在SharedPrefs,但是当主屏幕加载时,我请求从我的API "api/me"获取,它将存储的令牌发送到服务器,它将该令牌返回给我用户。在SharedPref s中的truefalse之间。我在应用程序抽屉中显示的数据(如用户名和照片)突然消失,但当我再次进入主屏幕时(应用程序向服务器发送请求)它再次工作。
如何从数据库中获取值并存储它,保持每个部件的访问权限。我使用提供程序。
代码如下:

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();
  }

ppcbkaq5

ppcbkaq51#

您可以创建ChangeNotifier,它存储有关应用程序全局状态的详细信息,如所述:黑暗模式,API令牌等。您可以使用ChaneNotifierProvider在main方法中的应用程序小部件上方的应用程序级别注入此消息。
现在,最初您需要在共享首选项中保存用户的登录状态,因为提供程序仅在运行时存在于应用程序范围中。
因此,一旦应用程序加载,只需根据共享的首选项更新ChangeNotifier(仅需一次),更改将反映在应用程序中的任何地方

相关问题