我应该如何在颤振应用程序中管理登录页面

Posted

技术标签:

【中文标题】我应该如何在颤振应用程序中管理登录页面【英文标题】:How should I manage login page in flutter app 【发布时间】:2020-07-12 13:18:08 【问题描述】:

我正在制作一个以启动画面开头的应用程序。 我想要的是,如果用户第一次签名,它应该重定向到过度登录屏幕。为此,我使用了共享首选项并存储了一个值来检查用户是否是新用户。从霸道开始,它应该在之后进入登录页面登录它将检查用户数据是否存在。在正常情况下,启动后它应该重定向到主屏幕。我的代码正在运行。但问题是我不知道如何安排它。 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() 代码

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

我想从入职到 AuthService().handleAuth()。 我如何从入职屏幕到达那里或向我推荐更好的东西。

【问题讨论】:

【参考方案1】:

在你的 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()

【讨论】:

当我从那里进入入职屏幕时,我想使用 StreamBuilder 进入登录页面,这样当我登录时它会带我进入下一页。

以上是关于我应该如何在颤振应用程序中管理登录页面的主要内容,如果未能解决你的问题,请参考以下文章

如何将 bloc 模式与颤振应用程序集成?

使用提供者值颤振初始路由

单击推送通知时如何在我的颤振应用程序中打开特定页面

颤振谷歌登录为空

如何在管理面板中第一次登录django员工用户?

如何在颤振应用程序中使用相同的 Firebase 匿名用户