【发布时间】:2021-12-12 05:54:13
【问题描述】:
我正在开发一个应用程序,当用户是新用户时,他必须在注册后进入主页之前填写表格。我正在将 Firebase 身份验证与社交登录和电子邮件一起使用。
问题在于,一旦在社交登录模块中更改了身份验证状态,就会通知侦听器并转到主页而不是转到该表单页面(侦听器位于正在侦听状态的包装类中更改用户是否登录)。但是当我直接使用电子邮件注册时,它工作正常。
下面是监听身份验证状态变化的 StreamBuilder
StreamBuilder<User>(
stream: Authentication().auth.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
User user = snapshot.data;
if (user != null) {
return Layout();
}
else {
return SignIn();
}
}
else {
return Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
},
)
通过查看控制台日志,我看到监听器被通知并且状态更改为已登录并立即调用主页,只有当用户登录时才应该调用主页&&是老用户。如果用户是新用户 && 已登录,则应调用表单页面。我不确定如何处理这种情况,因为 authSateChanges() 返回的 Stream 没有提供用户是新用户还是旧用户的详细信息。
有没有办法在我们获得凭据时暂停 AUthentication 类中的侦听器,因为我有机会通过以下代码行查看用户是否是新用户
UserCredential result = await auth.signInWithCredential(credential);
if(result.additionalUserInfo!.isNewUser){}
【问题讨论】:
标签: flutter firebase-authentication google-signin stream-builder