这是我尝试编写的第一个应用程序。

我在我的应用程序中使用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);

请注意,除了登录和注销外,这不会监听对用户对象的更改。要侦听用户的实际用户更改(例如isVerifiedphotoUrl更改),您需要使用firebase_user_stream之类的包,并使用类似以下内容的内容替换之前的流:

StreamProvider<FirebaseUser>.value(
  value: FirebaseUserReloader.onAuthStateChangedOrReloaded.asBroadcastStream(),
  lazy: false,
),

10-06 01:48