如何在Flutter中渲染小部件之前等待异步函数完成执行

卡利图斯

在我的main.dart文件中,我想检查是否已登录用户,以便将其定向到适当的屏幕。我正在使用SharedPrefence从Firebase存储用户详细信息。我该如何告诉我的函数等待我的SharedPreference异步函数完成执行,然后才能呈现相应的小部件。

下面是我的代码

  Widget _gotoHomeScreen() {
  AuthService.getuserPrefEmail().then((email) {
  print(email);
  AuthService.email = email;
  if (email == null) {
    return LoginScreen();
  } else {
    AuthService.uid = email;
    return HomeMenuScreen();
  }
});

}

乔治

您不必等待构建,您应该构建一些东西,向用户显示应用程序正在加载一些东西(或黑屏),然后在功能结束时重新构建。

您可以在创建小部件时将其Widget变量设置为默认值,例如使用CircularProgressIndicator,然后使用setState对其进行更改,如下所示:

class YourWidgetState extends State<YourWidget> {
  Widget _body = CircularProgressIndicator();  // Default Body

  @override
  void initState(){
    _gotoHomeScreen();
  }

  @override
  Widget build(BuildContext context){
    return _body;
  }

  Widget _gotoHomeScreen() {
    AuthService.getuserPrefEmail().then((email){
      AuthService.email = email;
      if (email == null) {
        setState(() => _body = LoginScreen());
      } else {
        AuthService.uid = email;
        setState(() => _body = HomeMenuScreen());
      }
    });
  }
}

另一种方法是使用变量来通知您有关加载情况,例如bool finishedLoading,并在完成后调用setState来更改值,使用email您设置变量来知道用户何时登录,并像这样进行条件构建:

bool loading = true;

@override
Widget build(BuildContext context){
  if(loading) return CircularProgressIndicator();

  if(AuthService.email == null)
    return LoginScreen();
  else
    return HomeMenuScreen();
}

Widget _gotoHomeScreen() {
  AuthService.getuserPrefEmail().then((email){
    AuthService.email = email;
    if (email != null) {
     AuthService.uid = email;
    }
    setState((){ loading = false; });
  });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何等待函数完成(线程中的线程)

如何等待构造函数完成?

如何在Node.js中继续之前等待函数完成

如何在角度2中等待函数完成执行?

如何在Flutter小部件测试中等待将来完成?

for循环应该如何等待直到其中的函数完成了在angularjs中的执行?

如何防止函数数组中的函数在上一个函数完成之前执行

等待异步递归函数完成,然后继续执行下一行代码

Flutter小部件测试-等待将来完成

在start方法停止之前,等待函数完成执行

Ember JS-如何在渲染之前等待异步函数响应

在执行异步等待任务时,Flutter显示小部件

Flutter Firebase setData()函数在异步函数完成之前将空值分配给字段

如何让jQuery等待递归函数完成?

Javascript在执行下一行之前不等待STRIPE.COM函数完成

在zsh中如何在外部命令完成之前遍历shell函数完成和别名完成?

如何在无限循环中等待函数完成?

Express:如何在调用某些东西之前等待一个函数完成

如何在角度 4 中等待函数完成?

NodeJs/Electron:如何在 ipcMain 发回他的答案之前等待函数完成?

异步等待不等待函数完成

如何在从主函数返回值之前等待委托函数完成

如何在执行下一个之前等待函数完成?

如何在flutter中等待异步函数完成处理

如何在反应中等待 JavaScript 函数完成?

Nodejs 等待异步映射函数完成执行

在 Flutter 中执行之前等待所有异步函数完成

如何在javascript中等待函数完成?

在迭代之前等待函数完成运行