Firebase Can';t登录后将用户重定向到主屏幕

Firebase Can';t登录后将用户重定向到主屏幕,firebase,flutter,firebase-authentication,Firebase,Flutter,Firebase Authentication,基本上,我想创建以下内容: 它可以工作,当用户未登录时,会在登录页上重定向,当用户登录时,他会在启动应用程序时直接进入主页。但当我的用户在登录页面上并单击connect时,它会将他连接起来,但不会将他重定向到主页,他会停留在登录页面上,他需要手动按两次return键才能在主屏幕上结束。 我很难关闭登录页面并打开主屏幕 以下是main.dart中的重定向代码: class AuthenticationWrapper extends StatelessWidget { const Authen

基本上,我想创建以下内容:

它可以工作,当用户未登录时,会在登录页上重定向,当用户登录时,他会在启动应用程序时直接进入主页。但当我的用户在登录页面上并单击connect时,它会将他连接起来,但不会将他重定向到主页,他会停留在登录页面上,他需要手动按两次return键才能在主屏幕上结束。 我很难关闭登录页面并打开主屏幕

以下是main.dart中的重定向代码:

class AuthenticationWrapper extends StatelessWidget {
  const AuthenticationWrapper({
    Key? key,
  }) : super(key : key);

  @override 
  Widget build(BuildContext context) {
    return StreamBuilder(
    stream: FirebaseAuth.instance.authStateChanges(),
    builder: (BuildContext context, snapshot) {
      if (snapshot.hasData) {
        return Navigation();
      } else
        return LandingPage();
    });
  }
}
重定向代码在我只使用登录页面时起作用(如下所示)


当用户登录时,它在主页上重定向了他,但当我添加登录页时,它被破坏了


下面是我的代码:

我认为流不是最好的方法。我更喜欢检查用户是否使用initState登录,以及是否在main.dart中登录。您必须将该页面放入小部件“主页”:

所以看起来是这样的:

main.dart

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      title: 'Title',
      initialRoute: "/",
      home: AuthPage(),
    );
  }
}
class _AuthPageState extends State<AuthPage> {
  Future<void> _loggedUserValidation() async {
    FirebaseAuth auth = FirebaseAuth.instance;

    FirebaseUser loggedUser = await auth.currentUser();
    if (loggedUser != null) {
      Navigator.pushReplacement(
          context, MaterialPageRoute(builder: (context) => Home()));
    } else {
      Navigator.pushReplacement(
          context, MaterialPageRoute(builder: (context) => SignIn()));
    }
  }

  @override
  void initState() {
    _loggedUserValidation();
    super.initState();
  }
AuthPage.dart

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      title: 'Title',
      initialRoute: "/",
      home: AuthPage(),
    );
  }
}
class _AuthPageState extends State<AuthPage> {
  Future<void> _loggedUserValidation() async {
    FirebaseAuth auth = FirebaseAuth.instance;

    FirebaseUser loggedUser = await auth.currentUser();
    if (loggedUser != null) {
      Navigator.pushReplacement(
          context, MaterialPageRoute(builder: (context) => Home()));
    } else {
      Navigator.pushReplacement(
          context, MaterialPageRoute(builder: (context) => SignIn()));
    }
  }

  @override
  void initState() {
    _loggedUserValidation();
    super.initState();
  }
class\u AuthPageState扩展状态{
Future _loggedUserValidation()异步{
FirebaseAuth auth=FirebaseAuth.instance;
FirebaseUser loggedUser=await auth.currentUser();
if(loggedUser!=null){
导航器。更换(
context,MaterialPageRoute(builder:(context)=>Home());
}否则{
导航器。更换(
context,MaterialPageRoute(builder:(context)=>SignIn());
}
}
@凌驾
void initState(){
_loggedUserValidation();
super.initState();
}

让我知道它是否有用。

请提供一个最小的可复制示例,而不是期望我们阅读您的所有代码您在哪里为此编写了导航逻辑?我所能看到的只是一个对用户进行身份验证的呼叫对不起,更新了我的问题。“当我添加登录页时,它被破坏了。”它是如何被破坏的?当您在调试器中单步执行代码时,哪一行不符合您的预期?