Firebase:注销后登录卡在加载中

Posted

技术标签:

【中文标题】Firebase:注销后登录卡在加载中【英文标题】:Firebase : Loggin in after logout stuck on loading 【发布时间】:2020-09-19 04:21:46 【问题描述】:

我使用 Firebase 身份验证,当我登录或注册时,它可以正常工作并将我前进到主页,但是当我注销时,它会成功注销我 但是当我再次登录时,它卡在加载屏幕上

我的应用流程是:main->Wrapper->Authenticate->Login/Register->Home

这是包装器:

class _WrapperState extends State<Wrapper> 
  int _currentTab = 1;

  final _page = [
    Search(),
    Home(),
    Account(),
  ];

  @override
  Widget build(BuildContext context) 
    final user = Provider.of<User>(context);
    print(user.uid);

    if (user == null) 
      return Authenticate();
     else 
      return
//        Home();
       

这里是登录:

RaisedButton(
                color: Colors.green[400],
                child: Text(
                  'دخول',
                  style: TextStyle(color: Colors.white),
                ),
                onPressed: () async 
                  if(_formKey.currentState.validate())
                    setState(() => loading = true);
                    dynamic result = await _auth.signInWithEmailAndPassword(email, password);
                    if(result == null) 
                      setState(() 
                        loading = false;
                        error = 'Could not sign in with those credentials';
                      );
                    
                  
                
            ),

这里是 FirebaseE 的 signIn 方法实现:

Future signInWithEmailAndPassword(String email, String password) async 
    try 
      AuthResult result = await _auth.signInWithEmailAndPassword(email: email, password: password);
      FirebaseUser user = result.user;
      return user;
     catch (error) 
      print(error.toString());
      return null;
    
  

【问题讨论】:

【参考方案1】:

加载时卡住了,因为您有两个setState,每当您按下按钮时,都会调用第一个setState 并将true 分配给变量loading。您应该将其更改为以下内容:

onPressed: () async 
                  if(_formKey.currentState.validate())
                    setState(()async 
                       loading = true;
                       dynamic result = await _auth.signInWithEmailAndPassword(email, password);
                    if(result == null)  
                        loading = false;
                        error = 'Could not sign in with those credentials';
                      );
                    
                  
                

【讨论】:

我将其修改为您的更正,但现在没有任何反应,甚至没有进入加载屏幕 我删除了加载并在控制台中通知我它已登录,但问题在于导航没有转到主页 你有没有在build方法中加载的条件? 在我获得 uid 后,Authenticate 使用 uid 导航到 Wrapper,然后 Wrapper 转到主页 我删除了所有加载代码,直到用户可以轻松退出并再次登录

以上是关于Firebase:注销后登录卡在加载中的主要内容,如果未能解决你的问题,请参考以下文章

当我使用重新加载功能时,Firebase Auth 会注销我吗?

Firebase Facebook 登录即使在卸载应用程序后清除缓存和注销

如何在颤动中自动注销firebase用户?

Firebase - 重新打开应用程序后用户注销时应用程序关闭

在颤动中按下注销按钮后如何重定向到登录页面

FirebaseAuthUserCollisionException?