Flutter设计模式:混合构建方法和异步函数

问题描述 投票:0回答:1

我具有以下异步函数,需要从页面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");
  }
}
firebase flutter
1个回答
0
投票

您可以从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处理您的期货

© www.soinside.com 2019 - 2024. All rights reserved.