通过应用程序在 firebase 上创建新用户,但屏幕未重定向到主页

问题描述 投票:0回答:1

我正在尝试在 flutter 上创建一个基本的注册屏幕。我成功创建了一个用户,但它仍然停留在注册屏幕上。但是当我检查 firebase 时,用户就在那里。我导航到登录页面,但无法使用新创建的用户登录。

如果我进行热重启,现在我可以使用新创建的用户登录。 我很困惑。这是什么情况。

class AuthRoute extends StatelessWidget {
  const AuthRoute({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder<User?>(
          stream: FirebaseAuth.instance.authStateChanges(),
          builder: (context, snapshot) {
            // user is logged in

            if (snapshot.hasData) {
              return HomeRoute();
            }

            // user is not logged in

            else {
              return const LoginRoute();
            }
          }),
    );
  }
}

我有三个屏幕。验证页面正在检查用户是否登录。另外2个是登录页面和注册页面。

这是我的注册页面;

class RegisterRoute extends StatefulWidget {
  const RegisterRoute({super.key});

  @override
  State<RegisterRoute> createState() => _RegisterRouteState();
}

class _RegisterRouteState extends State<RegisterRoute> {
// controllers for text fields
  final emailController = TextEditingController();
  final passwordController = TextEditingController();
  final confirmPasswordController = TextEditingController();

// register user method
  void registerUser() async {
    // loading logo

    showDialog(
      context: context,
      builder: (context) {
        return const Center(
          child: CircularProgressIndicator(),
        );
      },
    );

    try {
      if (passwordController.text == confirmPasswordController.text) {
        await FirebaseAuth.instance.createUserWithEmailAndPassword(
          email: emailController.text,
          password: passwordController.text,
        );

        // pop the loading circle
        Navigator.pop(context);
      } else {
        // show error message, passwords do not match

        wrongEmail();
      }
    } on FirebaseAuthException catch (error) {
      // pop the loading circle

      Navigator.pop(context);
      // wrong email

      if (error.code == "invalid-email") {
        wrongEmail();
      }

      // wrong password

      else if (error.code == "invalid-credential") {
        wrongPassword();
      }
    }
  }

  // wrong email message

  void wrongEmail() {
    showDialog(
      context: context,
      builder: (context) {
        return const AlertDialog(
          title: Text("Yanlış e-posta"),
        );
      },
    );
  }

  // wrong password message

  void wrongPassword() {
    showDialog(
      context: context,
      builder: (context) {
        return const AlertDialog(
          title: Text("Yanlış parola"),
        );
      },
    );
  }
flutter firebase firebase-authentication
1个回答
0
投票

之后,注册 authStateChanges() 流不会发出更新的状态。您可以尝试以下方法来更新状态:

if (passwordController.text == confirmPasswordController.text) {
        await FirebaseAuth.instance.createUserWithEmailAndPassword(
          email: emailController.text,
          password: passwordController.text,
        );

        Navigator.pop(context);

        Navigator.pushReplacement(
          context,
          MaterialPageRoute(builder: (context) => HomeRoute()),
        );
      } else {
        Navigator.pop(context);
        wrongPassword();
      }
© www.soinside.com 2019 - 2024. All rights reserved.