Повторный вход Flutter не направляет на предполагаемую домашнюю страницу - PullRequest
0 голосов
/ 29 февраля 2020

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

Пожалуйста, помогите мне найти решение.

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Попробуйте использовать общие предпочтения, чтобы сохранить их в качестве ключа входа в систему, и проверьте, если это правда, тогда go на главном экране или же перенаправьте на экран входа в систему.

Прежде всего добавьте зависимость общих предпочтений в * 1003. *

dependencies:
  flutter:
    sdk: flutter

  shared_preferences: ^0.5.6+2

SplashScreen.dart

Это первый экран, на котором мы проверяем, что если isLogin имеет значение , то go до 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(),
        ));;
  }
}

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

Я надеюсь, что это может помочь вам!

0 голосов
/ 29 февраля 2020

Это мой spla sh экран

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

Выйти

     void logoutUser()async{
    LogoutUser objLog = await createPost(logoutUrl,body);
    if(objLog.statusCode == 10000){
      print(("response is $resp"));
      SharedPreferences prefs = await SharedPreferences.getInstance();
      prefs.setBool('isLoggin', false);
       Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => Login()));
    }
    else showToast(objLog.message, duration: Toast.LENGTH_LONG);
  }
...