颤动的firebase身份验证提供者未通知
Posted
技术标签:
【中文标题】颤动的firebase身份验证提供者未通知【英文标题】:flutter firebase auth provider not notified 【发布时间】:2021-05-25 13:29:42 【问题描述】:我正在使用颤振进行登录并使用电子邮件注册。我的登录方法工作正常,我的注册(注册)方法基本相同,所以它们应该有相同的结果,但是注册函数中用户状态的变化不会通知包装器中的提供者,所以它无法切换到主屏幕。
在 AuthService 中的代码是这样的:
final FirebaseAuth _auth = FirebaseAuth.instance;
Stream<User> get user
print(_auth.authStateChanges());
return _auth.authStateChanges();
Future signInWithEP (String email, String password) async
try
UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: password);
User user = result.user;
return user;
catch (e)
print(e.toString());
return null;
Future signUpWithEP(String email, String password) async
try
UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
User user = result.user;
return user;
catch (e)
print(e.toString());
return null;
在 main.dart 中
return MultiProvider(
providers: [
StreamProvider<User>.value(
value: AuthService().user,
),
],
child: MaterialApp(
home: Wrapper(),
routes:
'/signin': (context) => SignIn(),
'/register': (context) => Register(),
,
),
在 wrapper.dart 中,
Widget build(BuildContext context)
final user = Provider.of<User>(context);
print("wrappper $user");
if(user == null)
return SignIn();
else
return Home();
在两种情况下(登录和注册),当点击按钮时,都会显示
D/FirebaseAuth( 4977): Notifying id token listeners about user ( some UID ).
D/FirebaseAuth( 4977): Notifying auth state listeners about user ( some UID ).
我相信这可能意味着用户状态已更改,但登录时会打印“包装器”+用户;在注册功能中它不会,这意味着包装器中的提供者没有收到更改,并且无法显示主屏幕。谁能告诉我哪里做错了?
【问题讨论】:
热重载后也可以显示主屏幕,这意味着用户状态确实发生了变化,只是没有及时显示在包装器中 【参考方案1】:我认为您忘记了方法中的 notifyListeners()
Future signInWithEP (String email, String password) async
try
UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: password);
User user = result.user;
notifyListeners(); // add here notify
return user;
catch (e)
print(e.toString());
return null;
这里
final user = Provider.of<User>(context)
改成
final user = context.watch<AuthUser>().user
【讨论】:
这不起作用,但还是谢谢你!我发现我的问题是我不应该在使用提供程序的同时使用路由,在这种情况下,提供程序是“范围的”。以上是关于颤动的firebase身份验证提供者未通知的主要内容,如果未能解决你的问题,请参考以下文章
如何在颤动中使用facebook执行firebase身份验证[重复]
未找到身份提供程序配置 - 使用 FacebookAuthProvider 反应本机 Firebase 身份验证
在 Firebase 中使用 Google 身份验证未收到电子邮件