我正在尝试将经过身份验证的用户ID作为文档ID插入数据到Firestore,但是我从参数中得到了null。
请看一下我的脚本。
void didChangeDependencies() {
uid = '';
super.didChangeDependencies();
}
Future _fetchUID() async {
var auth = AuthProvider.of(context).auth;
return await auth.getCurrentUser().then((user) => _uid = user.uid);
}
_validateAndSubmit() async {
setState(() {
_errorMessage = '';
_isLoading = true;
});
if (_validateAndSave()) {
try {
_fetchUID();
await Report.create(_uid, _suspectName, _plateNumber, _civilizationId,
_drivingLicenseId, _clause, _description);
return Navigator.of(context).pop();
} catch (e) {
setState(() {
_isLoading = false;
_errorMessage = e.message;
});
print(_errorMessage);
throw Exception(e);
}
}
}
在下面的此方法中,您可以看到我已经尝试设置
_uid
,但是仍然无法获得_uid
值。Future _fetchUID() async {
var auth = AuthProvider.of(context).auth;
return await auth.getCurrentUser().then((user) => _uid = user.uid);
}
这就是
getCurrentUser()
方法的样子。Future<FirebaseUser> getCurrentUser() async {
FirebaseUser user = await _firebaseAuth.currentUser();
return user;
}
我做错了吗?
最佳答案
首先,您混合了Future.then
语法和async
await
语法。
您应该以这种方式编写方法:
void _fetchUID() async {
var auth = AuthProvider.of(context).auth;
_uid = (await auth.getCurrentUser()).uid;
}
如果以这种方式调用
_uid
后null
对您来说仍然是_fetchUID
,则您根本就没有登录,这意味着您首次登录时就没有FirebaseUser
。在
_validateAndSubmit
方法中,您还首先需要来等待的_fetchUID
调用,否则它将在被分配值之前传递_uid
。...
try {
await _fetchUID();
await Report.create(_uid, ..);
...
关于firebase - 如何从Firebase身份验证获取用户ID作为字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56688534/