【发布时间】:2019-08-05 09:48:18
【问题描述】:
我在使用当前用户的 ID (UID) 时遇到问题。以下代码“有效”,但在某些情况下,_currentUID 在输出正确值之前首先输出“null”。
class _ContactsScreenState extends State<ContactsScreen> {
String _currentUID;
@override
initState() {
super.initState();
loadCurrentUser();
}
loadCurrentUser() async {
var currentUID = await _getCurrentUID();
setState(() {
this._currentUID = currentUID;
});
}
Future<String> _getCurrentUID() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
return user.uid;
}
@override
Widget build(BuildContext context) {
if (_currentUID == null){
print("current UserID = null");
} else {
print("current UserID = $_currentUID");
}
return StreamBuilder(
...
所以这实际上工作正常,按预期输出结果,但是经过检查,打印输出如下:
flutter: current UserID = null // why is it printing null?
flutter: current UserID = abcd1234abcd //correct
不寻常的是,这只会在用户第二次访问屏幕时发生。第一次加载屏幕/页面时,它将正确输出“仅”实际的当前用户 ID。当用户返回同一页面时,它将打印当前用户两次(如上所示)。
【问题讨论】:
-
我认为当 auth 对象尚未完成初始化时会发生这种情况。为避免这种情况,您可以使用
AuthStateListener。 -
请确保在身份验证操作完成之前不要导航到屏幕。
currentUser()函数也不是异步的。
标签: firebase dart flutter firebase-authentication