Flutter firebase登录后如何自动重定向?
我遵循本教程将firebase auth实现到我的应用程序 除了一件事,一切都很顺利。当我进入登录屏幕并单击登录按钮时,我必须重新启动应用程序才能访问主页。 当我单击“注销”时不会发生这种情况,我会立即重定向到“登录” 这是我的登录:Flutter firebase登录后如何自动重定向?,flutter,Flutter,我遵循本教程将firebase auth实现到我的应用程序 除了一件事,一切都很顺利。当我进入登录屏幕并单击登录按钮时,我必须重新启动应用程序才能访问主页。 当我单击“注销”时不会发生这种情况,我会立即重定向到“登录” 这是我的登录: 未来登录({String email,String password})异步{ 试一试{ 等待\u firebaseAuth.signin使用Email和Password( 电子邮件:电子邮件,密码:密码); 返回“Connecté”; }关于FireBaseAu
未来登录({String email,String password})异步{
试一试{
等待\u firebaseAuth.signin使用Email和Password(
电子邮件:电子邮件,密码:密码);
返回“Connecté”;
}关于FireBaseAuth异常捕获(e){
返回e.message;
}
}
主飞镖
class AuthenticationWrapper扩展了无状态小部件{
const AuthenticationWrapper({
关键点,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
final firebaseUser=context.watch();
if(firebaseUser!=null){
返回主页();
}
返回屏幕();
}
}
我的提升按钮:
ElevatedButton(
已按下:(){
context.read().sign(
电子邮件:emailController.text.trim(),
密码:passwordController.text.trim());
},
子项:文本(“Se连接器”),
样式:钮扣样式(
背景颜色:
MaterialStateProperty.all(
颜色(0xff0d47a1)),
形状:MaterialStateProperty.all<
RoundedRectangleBorder>(
圆形三角形边框(
边界半径:
边界半径。圆形(40)),
))
实际上,用户登录后,您还没有将导航器添加到主屏幕
在升高的按钮中,已按下
onPressed: () {
await context.read<Authentication>().signIn(
email: emailController.text.trim(),
password: passwordController.text.trim());
Navigator.push(context,MaterialPageRoute(builder: (context) => HomePage()));
},
onPressed:(){
等待上下文。读取()。签名(
电子邮件:emailController.text.trim(),
密码:passwordController.text.trim());
push(context,MaterialPageRoute(builder:(context)=>HomePage());
},
这将起作用。示例代码为
bool invalid = false;
String password;
String error = "";
loginUser() async {
print(error);
try {
await FirebaseAuth.instance
.signInWithEmailAndPassword(email: email, password: password);
} on FirebaseAuthException catch (e) {
error = e.toString();
}
FirebaseAuth.instance.authStateChanges().listen((user) {
if (error.isNotEmpty) {
setState(() {
invalid = true;
});
} else {
setState(() {
Navigator.popAndPushNamed(context, "homePage");
});
}
});
}
就在登录按钮上方
if (error.isNotEmpty)
Row(mainAxisAlignment: MainAxisAlignment.center, children: [
if (error.split(" ").contains("password"))
Text(
"Invalid Password",
style: TextStyle(color: Colors.red),
),
if (error.split(" ").contains("record"))
Text(
"User Does Not Exist",
style: TextStyle(color: Colors.red),
),
]),
检查后,它的工作很好,谢谢你,我正试图添加导航到authenticate.dart这是不可能的。您知道如何添加错误消息吗?如果我输入了错误的密码或其他东西,则不会显示任何内容。我还遇到了一个问题,当您单击“注销”时,您已注销,但如果我在手机上按“上一步”。我回到主页..要检查密码是否错误,可以使用FirebaseAuthException并将其存储在字符串中。在此之后,检查字符串是否不为空,然后在登录按钮上方添加一个文本,该文本仅在错误字符串不为空时显示错误的密码。(别忘了使用setState)(如果你想要我可以在这里发布的示例代码),你可以使用navigator.of(context.popintil)(ModalRoute.withName('loginPage'))