1

我的项目上有 2 个网页

在此处输入图像描述

在此处输入图像描述

我需要管理用户会话。如果用户已登录,则显示主页,如果用户未登录,则显示登录页面。

我正在使用提供程序来检查会话的状态

  @override
  Widget build(BuildContext context) {
    return Consumer<LoginGeneralNotifier>(
      builder: (context, appGenaralNotifier, _) {
        return appGenaralNotifier.getLogged()
            ? HomePage()
            : LoginPage();
      },
    );
  }
}

问题是我登录后url没有改变

4

3 回答 3

0

我所做的是

我创建了一个保存所有全局变量的类

在那里我创建了一个变量bool loginStatus;

并创建两个方法getset来处理值

每当登录成功时,我都会将值设置为 trueloginStatus=true;

并且在init()方法中的新页面上,我正在检查变量的值,如果值为 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();
  }
于 2019-12-18T22:34:54.327 回答
0

全局变量在编程世界中是非常不受欢迎的(除非绝对没有其他替代方案可用)。改用用户会话。查看FlutterSession。该软件包在 Flutter 中添加了用户会话支持,并且易于使用。

// Store value to session
await FlutterSession().set("token", myJWTToken);

// Retrieve item from session
dynamic token = await FlutterSession().get("token");
于 2020-07-24T04:00:25.070 回答
0

您可能想使用 Navigator.of(context).pushNamed(HomePageNamedRoute);

这可以在 initState 中完成,如下所示: Flutter Redirect to a page on initState

于 2019-12-18T21:16:58.930 回答