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 登录即使在卸载应用程序后清除缓存和注销