Android studio 颤振重新登录它不会指向预期的主页

Android studio 颤振重新登录它不会指向预期的主页,android-studio,flutter,logout,bottomnavigationview,Android Studio,Flutter,Logout,Bottomnavigationview,Flatter注销会指向登录页面,但重新登录后不会重定向到预期的主页 我已使用以下导航进行登录 Navigator.of(context).pushReplacement(PageRouteBuilder(pageBuilder: (_, __, ___) => Home())); 我的应用程序由三个底部导航栏组成。主页位于第二个导航栏中。我必须从第三个导航栏注销 我已使用以下代码注销 Navigator.pushNamedAndRemoveUntil(context, '/Login'

Flatter注销会指向登录页面,但重新登录后不会重定向到预期的主页

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

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

请帮助我找到解决方案。

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

首先,在您的
pubspec.yaml

dependencies:
  flutter:
    sdk: flutter

  shared_preferences: ^0.5.6+2
飞溅屏幕。飞镖

_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)),
),
_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}
这是我们检查isLogin是否为真的第一个屏幕,然后转到主屏幕其他重定向到登录屏幕

_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(),
        ));;
  }
}
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)),
),
_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}
主屏幕.省道

_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)),
),
_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}
单击注销时,将isLogin设置为false

_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)),
),
_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}

我希望这能帮助你

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

首先,在您的
pubspec.yaml

dependencies:
  flutter:
    sdk: flutter

  shared_preferences: ^0.5.6+2
飞溅屏幕。飞镖

_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)),
),
_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}
这是我们检查isLogin是否为真的第一个屏幕,然后转到主屏幕其他重定向到登录屏幕

_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(),
        ));;
  }
}
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)),
),
_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}
主屏幕.省道

_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)),
),
_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}
单击注销时,将isLogin设置为false

_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)),
),
_logout() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool('isLogin', false);
  Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginScreen(),
      ));
}

我希望这能帮助你

这是我的启动屏幕

    class SplashState  extends State<SplashScreen>{
  bool isLogged = false;
  startTime(){
    return new Timer(Duration(milliseconds: 3000), navigateUser);
  }

  @override
  void initState() {
    super.initState();
    getStoredValue();
    }


  void getStoredValue() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    if (!prefs.containsKey('isLoggin')) {
      prefs.setBool('isLoggin', false);
      print("login set to False");
    }


    isLogged = prefs.getBool('isLoggin');
    print("Status in splash -----------$isLogged");
    startTime();
  }

  @override
  Widget build(BuildContext context) {
  SystemChrome.setEnabledSystemUIOverlays([]);
    return  Container(
        height: double.infinity,
        width: double.infinity,
        decoration: BoxDecoration(
          gradient:LinearGradient(
            begin: Alignment.topLeft,
            end: Alignment.bottomRight,
            colors: <Color>[
             colorStyle.splashPink,
             colorStyle.splashOrange,
            ],
          )
        ),
        child: Center(
          child:  Image.asset("assets/images/splash_logo.png", height: 85.0),
        ),
    );
  }

  void navigateUser() {
    if (isLogged == true) {
    Navigator.of(context).pushReplacement(
        PageRouteBuilder(pageBuilder: (_, __, ___) => Home()));
    }
    else {
      Navigator.of(context).pushReplacement(
          PageRouteBuilder(pageBuilder: (_, __, ___) => Login()));
    }
    }
}

这是我的闪屏

    class SplashState  extends State<SplashScreen>{
  bool isLogged = false;
  startTime(){
    return new Timer(Duration(milliseconds: 3000), navigateUser);
  }

  @override
  void initState() {
    super.initState();
    getStoredValue();
    }


  void getStoredValue() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    if (!prefs.containsKey('isLoggin')) {
      prefs.setBool('isLoggin', false);
      print("login set to False");
    }


    isLogged = prefs.getBool('isLoggin');
    print("Status in splash -----------$isLogged");
    startTime();
  }

  @override
  Widget build(BuildContext context) {
  SystemChrome.setEnabledSystemUIOverlays([]);
    return  Container(
        height: double.infinity,
        width: double.infinity,
        decoration: BoxDecoration(
          gradient:LinearGradient(
            begin: Alignment.topLeft,
            end: Alignment.bottomRight,
            colors: <Color>[
             colorStyle.splashPink,
             colorStyle.splashOrange,
            ],
          )
        ),
        child: Center(
          child:  Image.asset("assets/images/splash_logo.png", height: 85.0),
        ),
    );
  }

  void navigateUser() {
    if (isLogged == true) {
    Navigator.of(context).pushReplacement(
        PageRouteBuilder(pageBuilder: (_, __, ___) => Home()));
    }
    else {
      Navigator.of(context).pushReplacement(
          PageRouteBuilder(pageBuilder: (_, __, ___) => Login()));
    }
    }
}

您是否尝试共享首选项?是否尝试了
Navigator.of(context.pushreplacementname('/Login')@AhmedKhattab yep。。但还是要面对这个问题。@HardikTalaviya你是说我使用了共享偏好吗?如果是。。是的,我用过it@SanaAfreen是保存您的登录密钥并根据首选项中设置的密钥打开屏幕,是否尝试此操作?是否尝试共享首选项?是否尝试
Navigator.of(context).pushReplacementNamed('/login')@AhmedKhattab yep。。但还是要面对这个问题。@HardikTalaviya你是说我使用了共享偏好吗?如果是。。是的,我用过it@SanaAfreen是的,保存您的登录密钥并按照首选项中设置的密钥打开屏幕,是否尝试此操作?