Как мне управлять страницей входа в приложение Flutter - PullRequest
0 голосов
/ 12 июля 2020

Я делаю приложение, которое запускается с экраном spla sh. Я хочу, чтобы пользователь, подписывающий в первый раз, перенаправлял его на экран за бортом. Для этого я использовал общие настройки и сохранил значение, чтобы проверить, является ли пользователь новым или нет. И из-за властности он должен go для входа страница после входа в систему проверит, существуют ли данные пользователя. И в обычном случае после spla sh он должен перенаправить на домашний экран. Мой код работает. Но проблема в том, что я не знаю, как это организовать. Main.dart -> (проверьте, вошли ли вы или нет) -> (если уже авторизовались) Home.dart -> (иначе проверьте первый вход или нет) -> (если первый раз авторизуетесь, то) Экран входа Оттуда Экран входа - > else Экран входа в систему Если вам нужна дополнительная информация, просто спросите меня

Это код из main.dart

return SplashScreen.navigate(
            name: 'assets/splash.flr',
            next: (context) {
              return AuthService().handleAuth();
            },
            startAnimation: 'Untitled',
            until: () => Future.delayed(Duration(seconds: 4)),
            backgroundColor: Colors.white,
          );
 

Это AuthService (). handleAuth () code

handleAuth() {
    return StreamBuilder(
        stream: FirebaseAuth.instance.onAuthStateChanged,
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            Navigator.maybePop(context);
            SharedPrefFunction().saveLoginPreference();
            return CheckUser();
          }
          else{
          return LoginScreen();}
        });
  }

Это код для подключения

      onTap: () {
        Navigator.of(context)
            .pushReplacementNamed(LoginScreen.loginRoute);
      },

Я хочу go в AuthService (). HandleAuth () из подключения. Как мне добраться туда с экрана адаптации или предложить что-нибудь получше?

1 Ответ

0 голосов
/ 12 июля 2020

В вашем main.dart

bool loggedIn = false;
@override
 void initState() {
 super.initState();
 isUserLoggedIn();
}

void isUserLoggedIn() async {
 _loggedIn = await SharedPrefFunction().getLoginPreference()
 setState(() => loggedIn = _loggedIn);
}

Widget build(BuildContext context) {
 loggedIn ? LoginScreen() : SplashScreen()
}
...