firebase - 将FirebaseUser映射到自定义User对象

标签 firebase flutter dart google-cloud-firestore flutter-provider

我有一个Flutter应用程序,正在其中使用StreamProvider监听Firebase的身份验证更改以显示正确的屏幕。我想做的是将FirebaseUser映射到自定义User对象(该对象将从Firestore检索),以使其从小部件树中的任何位置均可访问。

有什么办法可以做到这一点?

我现在正在做什么:

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  Stream<FirebaseUser> get user {
    return _auth.onAuthStateChanged;
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamProvider<FirebaseUser>.value(
      value: AuthService().user,
      child: MaterialApp(...)

最佳答案

首先,从定制模型开始,并确定您想要的东西,在这种情况下,我将简单地获得uid

用户模型

 class User {
      final String uid;

      User({ this.uid });
    }

验证服务
// Create user object based on FirebaseUser
  User _customModelForFirebaseUser(FirebaseUser user) {
    return user != null ? User(uid: user.uid) : null;
  }

  // auth changed user stream
  Stream<User> get user {
    return _auth.onAuthStateChanged
      .map(_customModelForFirebaseUser)
  }

我的应用程式
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamProvider<User>.value(
      value: AuthService().user,
      child: MaterialApp(
        home: Wrapper(),
      ),
    );
  }
}

然后,您可以从任何地方访问它,如下所示:
 @override
      Widget build(BuildContext context) {

        final user = Provider.of<User>(context);
}

关于firebase - 将FirebaseUser映射到自定义User对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62325215/

相关文章:

Dart 可观察列表,不会在更改时删除并重新插入所有元素

flutter - 类型 '_InternalLinkedHashMap<String, dynamic>'不是类型转换中类型 'Topic'的子类型

ios - 如何从 Firebase 快照设置变量 (swift)

java - 控制 FirebaseStorage 中的用户图像

ios - 使用 Firebase 查询重新加载数据后复制 collectionView 单元格

java - 如何根据 Firebase 中帖子的点赞数对 Android 中的 RecyclerView 中的数据进行排序?

flutter - 跨多个屏幕使用的Flutter Stateful Widget得以重建

android - 如何在 Dart 帖子请求中发送数组

flutter - Dart:N元树的实现

javascript - 如何将 Google Dart 与 Firebase 简单登录一起使用(函数内传递函数)