将FirebaseUser映射到自定义User对象 [英] Map FirebaseUser to custom User object

查看:69
本文介绍了将FirebaseUser映射到自定义User对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a Flutter app in which I'm listening to auth changes from Firebase to display the correct screen, using a StreamProvider. What I would like to do is to map the FirebaseUser to a custom User object, which would be retrieved from Firestore, to have it accessible from anywhere in the widget tree.

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

Is there any way to achieve this?

我现在正在做什么:

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

First, start with the custom model and decide what you would like to have, in this case I will simply have the uid

 class User {
      final String uid;

      User({ this.uid });
    }

AuthService

// 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(),
      ),
    );
  }
}

然后您可以从任何地方访问它,就像这样:

Then you can access it from anywhere, like so:

 @override
      Widget build(BuildContext context) {

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

这篇关于将FirebaseUser映射到自定义User对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆