导航到新屏幕时提供程序不起作用

时间:2021-04-21 09:06:22

标签: flutter dart provider

我通过提供者实现了身份验证

问题是何时第一次通知 myHomeCalss 用户已通过不返回正确页面(MainGui)进行身份验证

SplashPages 是一个带有继续按钮的页面,并推送登录页面,

登录页面被推送到客户之外

image

但是当我没有通过 SplashPages 时,它就完美了

请随意

//启动页面

ContinueButton(
                  onPressed:  (){

                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (_) =>
                              ListenableProvider.value(
                                value: yourModel,
                                child: LoginPage(),
                              ),
                        ),
                      );
                    }

                )

//主

void main() async {
      setupLocator();
      WidgetsFlutterBinding.ensureInitialized();
      await firebase_core.Firebase.initializeApp();
      runApp(
        MultiProvider(
          providers: [
            ChangeNotifierProvider(create: (_) => AuthenticationService()),
          ],
          child: MyApp(),
        ),
      );
    }

//我的应用

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: MyHome(),
        builder: (context, child) => Navigator(
              key: locator<DialogService>().dialogNavigationKey,
              onGenerateRoute: (settings) => MaterialPageRoute(
                  builder: (context) => DialogManager(child: child)),
            ));
  }
}

我的家

 Class MyHome extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return SafeArea(
          child: FutureBuilder<bool>(
              future: startTime(),
              builder: (BuildContext context, AsyncSnapshot<bool> snapshot2) {
                if (snapshot2.hasData) {
                  if (snapshot2.data) {
                    return SplashPages();
                  } else {
                    return Consumer<AuthenticationService>(builder: (_, auth, __) {
                      if (auth.currentUserr == null) {
                        return LoginPage();
                      } else {
                        return FutureBuilder(
                            future: auth.populateCurrentUser(auth.currentUserr),
                            builder: (context, snapshot) {
                              if (snapshot.hasData) {
                                if (auth.currentUserr.emailVerified) {
                                  return MainGui();
                                } else {
                                  return ValidationMailPage(
                                    email: auth.currentUserr.email,
                                  );
                                }
                              } else
                                return Container(
                                    //     child: Center(
                                    //         child: SpinKitRotatingCircle(
                                    //   color: Colors.white,
                                    //   size: 50.0,
                                    // ))
                                    );
                            });
                      }
                    });
                  }
                } 

1 个答案:

答案 0 :(得分:1)

您可以考虑使用 SharedPreferences,您将在其中存储用户(或者可能只是令牌),然后在呈现应用程序之前检查 main 是否存储有令牌/用户;如果有令牌,您登录然后推送到主页,如果没有,则直接导航到登录页面。

SharedPrefenreces 是持久化数据存储,即使您重新启动应用程序,它也会持续存在,但 Provider 是一种状态管理解决方案,不会在应用程序重新启动之间持续存在。

这是您可以使用的 SharedPreferences 插件。

相关问题