微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在用于小部件构建之前如何使用异步方法修改变量?

如何解决在用于小部件构建之前如何使用异步方法修改变量?

我有一个名为 userName 的变量,它依赖于数据库查询,所以 async 是必须的。 我的旧代码可以这样总结

class IndexScreen extends StatefulWidget {
  @override
  _IndexScreenState createState() => _IndexScreenState();
}

//use database query function
Future<void> initUser() async{
  UserTable().getUserInfo(curUserEmail).then((value)=>null);
}

//show page
class _IndexScreenState extends State<IndexScreen> {
  @override
  Widget build(BuildContext context) {
    initUser().then((value){
    final theme = Theme.of(context);
    return WillPopScope(
      onWillPop: () =>router.navigateto(context,'/welcome'),child: SafeArea(
        child: Scaffold(
//The static global variable is used in Body in other files
            body: Body()
        ),),);
  });
}
}

它警告说 return 小姐,我不知道如何修改我的代码

谢谢!!

解决方法

您可以使用 FutureBuilder 小部件实现此目的。请参考下面的代码。

class IndexScreen extends StatefulWidget {
  @override
  _IndexScreenState createState() => _IndexScreenState();
}

//use database query function
Future<Map> initUser() async {
  final data =
      await UserTable().getUserInfo(curUserEmail);
  return data;
}

//show page
class _IndexScreenState extends State<IndexScreen> {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: initUser(),builder: (BuildContext context,AsyncSnapshot snapshot) {
        if (snapshot.hasData) {
          final theme = Theme.of(context);
          return WillPopScope(
            onWillPop: () => router.navigateTo(context,'/welcome'),child: SafeArea(
              child: Scaffold(
                body: Body(),),);
        } else {
          // Returns empty container untill the data is loaded
          Container();
        }
      },);
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。