这是我尝试编写的第一个应用程序。
我在我的应用程序中使用Firebase Auth和Cloud Firestore。如何在不使用等待状态的情况下使登录用户的uid在每个屏幕上可用?
我知道我可以这样:
final FirebaseUser user = await _auth.currentUser();
String id = user.uid;
但是我需要不等待就访问uid,例如在这里:
Stream<QuerySnapshot> get groups {
return Firestore.instance.collection("userGroups")
.where("userId", isEqualTo: " uid ").snapshots();
}
当我使用提供程序包时,我以为可以通过它使用它。但是最好的方法是什么呢?
谢谢!
最佳答案
您可以在应用上方provide
firebase身份验证流:
StreamProvider<FirebaseUser>.value(
value: FirebaseAuth.instance.onAuthStateChanged,
lazy: false,
child: YourApp(),
)
当想要获得用户时,您可以:
final user = Provider.of<FirebaseUser>(context);
请注意,除了登录和注销外,这不会监听对用户对象的更改。要侦听用户的实际用户更改(例如
isVerified
或photoUrl
更改),您需要使用firebase_user_stream之类的包,并使用类似以下内容的内容替换之前的流:StreamProvider<FirebaseUser>.value(
value: FirebaseUserReloader.onAuthStateChangedOrReloaded.asBroadcastStream(),
lazy: false,
),