首页 > 解决方案 > 颤振重新登录它不会指向预期的主页

问题描述

Flutter Logout 指向登录页面,但重新登录后它不会重定向到预期的主页。

我已使用以下导航进行登录

Navigator.of(context).pushReplacement(PageRouteBuilder(pageBuilder: (_, __, ___) => Home()));

我的应用程序由三个底部导航栏组成。主页位于第二个导航栏中。我必须从第三个导航栏注销。

我已使用以下代码进行注销

Navigator.pushNamedAndRemoveUntil(context, '/Login', (_) => false);

我也试过代码

 Navigator.popAndPushNamed(context, "/Login");


Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (BuildContext context) => Login(),), (Route route) => false);

请帮我找到解决方案。

标签: android-studioflutterlogoutbottomnavigationview

解决方案


尝试使用共享首选项存储为登录密钥并检查它是否为真,然后转到主屏幕或重定向到登录屏幕。

首先在您的pubspec.yaml

dependencies:
  flutter:
    sdk: flutter

  shared_preferences: ^0.5.6+2

闪屏.dart

这是我们检查isLogin是否为真然后转到HomeScreen或重定向到LoginScreen的第一个屏幕

_autoLogin() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  if (!prefs.containsKey('isLogin')) {
    prefs.setBool('isLogin', false);
  }
  if (prefs.getBool('isLogin')) {
    Navigator.pushReplacement(
        context,
        MaterialPageRoute(
          builder: (context) => HomeScreen(),
        ));
  } else {
    Navigator.pushReplacement(
        context,
        MaterialPageRoute(
          builder: (context) => LoginScreen(),
        ));;
  }
}

登录界面.dart

_setIsLogin() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', true);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => HomeScreen(),
      ));
}


MaterialButton(
  minWidth: MediaQuery.of(context).size.width,
  padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
  onPressed: () {
    _setIsLogin();
  },
  child: Text("LOGIN",
      textAlign: TextAlign.center,
      style: style.copyWith(
          color: Colors.white,
          fontWeight: FontWeight.bold,
          fontSize: 18.0)),
),

HomeScreen.dart

单击注销时将isLogin设置为false

_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}

我希望这可以帮助你!


推荐阅读