我正在尝试在 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"),
);
},
);
}
之后,注册 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();
}