firebase - 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');
}
},
));
}
}
解决方案
我尝试了以下方法并能够使其正常工作:
FutureBuilder<DocumentSnapshot>(
future: _autheService.fetchCurrentUser(firebaseAuth.currentUser.uid),
//added AsyncSnapshot<DocumentSnapshot>
builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
//...
}
)
推荐阅读
- c# - 在 UWP C# 中使用两个不同的字符串创建一个文本文件
- python - 使用熊猫将数据按id,var1分组为python中的连续日期
- c - 无法在 Windows 上的 Linux 子系统中创建消息队列
- docker - 如何为 nginx docker 设置 ssl
- python-3.x - 'Python manage.py runserver' "ValueError: Unable to configure handler 'mail_admins'".:
- azure - 无法通过 az cli 创建预定查询 - 条件如何解析?
- asp.net - 必须在每次构建之前创建虚拟目录以防止错误
- python - 如何绕过 python 请求 SSL 和代理错误?
- c++ - 如何使用 std::reference_wrapper 作为类成员?
- google-analytics - Google Analytics(分析)代理检测如何工作?