我具有以下异步函数,需要从页面build()进行调用,以获取当前用户的UID。但是,build()不是异步函数,并且我不能使用等待功能。
那么,这里的正常做法是什么?
Future<String> getUID() async{
bool isLoggedInFlag = isLoggedIn();
if (isLoggedInFlag) {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
String uid = user.uid;
return uid
}else{
print("no uid found");
}
}
您可以从initState()方法调用异步方法,但在异步方法完成之前,uid将返回null:
class _TestState extends State<Test> {
String uid;
@override
void initState() {
super.initState();
getUID();
}
void getUID() async {
Future.delayed(Duration(seconds: 2)); //Simulate the Firebase call
setState(() {
uid = 'firebasevalue';
});
}
@override
Widget build(BuildContext context) {
return Center(
child: Text(uid ?? 'loading'),
);
}
}
但这不是唯一的解决方案。您可以使用FutureBuilder或StreamBuilder处理您的期货