Firebase Can';t登录后将用户重定向到主屏幕
基本上,我想创建以下内容: 它可以工作,当用户未登录时,会在登录页上重定向,当用户登录时,他会在启动应用程序时直接进入主页。但当我的用户在登录页面上并单击connect时,它会将他连接起来,但不会将他重定向到主页,他会停留在登录页面上,他需要手动按两次return键才能在主屏幕上结束。 我很难关闭登录页面并打开主屏幕 以下是main.dart中的重定向代码:Firebase Can';t登录后将用户重定向到主屏幕,firebase,flutter,firebase-authentication,Firebase,Flutter,Firebase Authentication,基本上,我想创建以下内容: 它可以工作,当用户未登录时,会在登录页上重定向,当用户登录时,他会在启动应用程序时直接进入主页。但当我的用户在登录页面上并单击connect时,它会将他连接起来,但不会将他重定向到主页,他会停留在登录页面上,他需要手动按两次return键才能在主屏幕上结束。 我很难关闭登录页面并打开主屏幕 以下是main.dart中的重定向代码: class AuthenticationWrapper extends StatelessWidget { const Authen
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();
}
让我知道它是否有用。请提供一个最小的可复制示例,而不是期望我们阅读您的所有代码您在哪里为此编写了导航逻辑?我所能看到的只是一个对用户进行身份验证的呼叫对不起,更新了我的问题。“当我添加登录页时,它被破坏了。”它是如何被破坏的?当您在调试器中单步执行代码时,哪一行不符合您的预期?