首页 > 解决方案 > Flutter - 在 firebase firestore 中获取当前用户的文档

问题描述

我正在使用 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 用户: 在此处输入图像描述

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


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

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

推荐阅读