作者:o0沢田纲吉0o | 来源:互联网 | 2023-08-18 15:13
我的proyect上有2个网页
我需要管理用户会话。如果已登录,则显示主页,如果未登录,则显示登录页面。
我正在使用提供程序来检查会话的状态
@override
Widget build(BuildContext context) {
return Consumer(
builder: (context,appGenaralNotifier,_) {
return appGenaralNotifier.getLogged()
? HomePage()
: LoginPage();
},);
}
}
问题是登录后该网址不会更改
您可能要使用Navigator.of(context).pushNamed(HomePageNamedRoute);
这可以在initState中完成,如下所示:
Flutter Redirect to a page on initState
,
我做什么
我创建了一个保留所有全局变量的类
我创建了一个变量bool loginStatus;
并创建两个方法 get 和 set 来处理值
只要登录成功,我就将值设置为true loginStatus=true;
在init()
方法的新页面上,我正在检查变量的值(如果value为false,则使用户进入登录页面,否则继续
class GlobalValues{
static bool loginStatus;
static void setLoginStatus(bool val) {
loginStatus = val;
}
static bool getLoginStatus() {
return loginStatus == null ? false : loginStatus;
}
}
如果登录成功,则在登录页面上
GlobalValues.setLoginStatus(true);
在其他类页面上的init方法
@override
void initState() {
if (GlobalValues.getLoginStatus()) {
// call your login page class here
//Navigator.of(context).pushNamed(LoginPageNamedRoute);
Navigator.pop(context);
}
super.initState();
}
,
全局变量在编程世界中广为人知(除非绝对没有其他替代方法可用)。请改用用户会话。签出FlutterSession。该软件包在Flutter中增加了对用户会话的支持,并且易于使用。
// Store value to session
await FlutterSession().set("token",myJWTToken);
// Retrieve item from session
dynamic token = await FlutterSession().get("token");