【问题标题】:Flutter - Get the current user's document in firebase firestoreFlutter - 在 firebase firestore 中获取当前用户的文档
【发布时间】:2021-07-31 00:30:31
【问题描述】:

我正在使用 firebase 电子邮件和密码身份验证来登录/注册用户,当创建用户时,会使用 id 创建一个包含额外信息(包括:用户名、电子邮件、头像、电话...的个人资料信息)的新文档该文件是firebaseAuth.currentUser.uid。当用户使用他的帐户登录时,包含AppBar() 的主页应该显示用户的全名,为此我在auth_services.dart 中创建了一个方法,该方法检索当前用户的文档并返回一个对象EndUser 我得到的最多完成了,但是

问题是当我尝试读取检索到的数据时它返回 null

这是根据用户的uid 获取用户文档的方法:

Future<DocumentSnapshot> fetchCurrentUser(String uuid) async {
    return await firebaseFirestore.collection('users').doc(uuid).get();
}

这是我应该读取数据的main_page.dart

class MainScreen extends StatefulWidget {
  @override
  _MainScreenState createState() => _MainScreenState();
}

class _MainScreenState extends State<MainScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Header(), //where I am supposed to display data
      ),
      //body: ...   
    );
  }
}

//this is the header widget


class Header extends StatefulWidget {
  @override
  _HeaderState createState() => _HeaderState();
}

class _HeaderState extends State<Header> {
   @override
   Widget build(BuildContext context) {
     return Container(
       child: FutureBuilder<DocumentSnapshot>(
       future: _autheService.fetchCurrentUser(firebaseAuth.currentUser.uid),
       builder: (context, snapshot) {
         if (snapshot.hasData) {
           return Row(
             children: [
               Text(snapshot.data.data()['fullname'],),
             ],
           );
         } else {
           print("err is: " + snapshot.data.data()); //null 
           return Text('empty');
         }
       },
    ));
  }
}

firebase-firestore 用户:

【问题讨论】:

  • 尝试打印 UID 并查看它是否真的获得了一个 id,同时显示您如何将用户保存到 firestore
  • @griffinsyes 它确实获得了 UID,我已经上传了我的 firestore 用户样本

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

我尝试了以下方法并能够使其正常工作:

FutureBuilder<DocumentSnapshot>(
   future: _autheService.fetchCurrentUser(firebaseAuth.currentUser.uid),
   //added AsyncSnapshot<DocumentSnapshot>
   builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
      //...   
   }
)

【讨论】:

    猜你喜欢
    • 2022-07-21
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2020-03-03
    • 2020-08-18
    • 2021-03-05
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多