如何显示循环进度指示器,直到加载值?

时间:2020-08-15 21:41:37

标签: flutter dart

我有一个小部件,该小部件在第一次单击时显示错误页面,表示我要达到的值为null ...当我第二次打开该小部件时,它可以工作,因为在第一次单击时加载了该值,并且屏幕显示正确。在加载值之前,如何使用户看到“循环进度指示器”而不是错误页面?

这是小部件:

  Widget build(BuildContext context){
    var user = Provider.of<UserRepository>(context);
    user.cacheGet();
    return Scaffold(
      appBar: AppBar(
        title: Text("Last Conversation"),
      ),
      body: user.conversationID.values == null
          ? Center(
              child: CircularProgressIndicator(),
            )
          : Container(
              child: _myListView(context, user.conversationID.values),
            ),
    );
  }

由于user.conversationID.valuesnull,因此显示错误。它是通过类型为cacheGet( )的{​​{1}}函数加载的...因此,如果我返回并再次打开同一屏幕(窗口小部件),则会加载该值,并且不会显示错误。我尝试使用三元运算符,但是在这种情况下它不起作用。

编辑

这是Future <bool>函数。

cacheGet

2 个答案:

答案 0 :(得分:1)

只需用将来的构建器包装小部件即可。这是示例代码:

FutureBuilder<bool>(
        future: user.cacheGet(),
        builder: (BuildContext context, AsyncSnapshot snapshot){
          if(snapshot.hasData){
            return user.conversationID.values == null
                ? Center(
              child: CircularProgressIndicator(),
            )
                : Container(
              child: _myListView(context, user.conversationID.values),
            );
          }else{
            return Container();
          }
        },
      )

答案 1 :(得分:0)

user.cacheGet();这样的例程不应该在build()内部完成,但是initState()可能是一个更好的选择。

我建议您查看FutureBuilder(或StreamBuilder)。考虑一下您的价值如何可能是 Future ,然后您的构建例程将使用FutureBuilder,它会在等待数据时显示CircularProgressIndicator(),然后再显示其他内容一旦有了数据(或者第三种情况是获取数据时出错)。未来应该在initState()中初始化。