如何使用嵌套的FutureBuilders并确保一个将来被称为另一个?

时间:2019-04-10 13:56:54

标签: asynchronous flutter future

为避免一次又一次调用我的FutureBuilder(请参阅this),我习惯了在initState中调用我的期货,并且在我不得不使用之前一直工作良好嵌套的。

基本上,我希望第二个Future仅在第一个的connectionState成为done之后才被调用。有帮助吗?

这是我的代码以进一步说明-

FutureBuilder(
  future: _future1,
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    return snapshot.connectionState != ConnectionState.done
        ? CircularProgressIndicator()
        : snapshot.data != 200
            ? SomeWidget()
            : FutureBuilder(
                future: _future2,
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  return snapshot?.connectionState == ConnectionState.done
                      ? Text('')
                      : CircularProgressIndicator();
                });
  },
);

因此,基本上来说,如果从_future2接收的数据不是200,我根本不希望_future1被调用。换句话说,我想决定是否_future2应该根据_future1的结果来调用。

1 个答案:

答案 0 :(得分:0)

initState中,我这样做-

_future1 = func.then(checkCode);

然后我编写了另一个函数,根据收到的代码来决定我的小部件-

checkCode(int statusCode) {
if (statusCode == 200) {
  _future2Func();
  widgetToNavigate = Text('');
} else {
  widgetToNavigate = SomeWidget();
}}

所以最后,我的构建代码如下所示-

Widget build(BuildContext context) {
return FutureBuilder(
  future: _future1,
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    return snapshot.connectionState != ConnectionState.done
        ? CircularProgressIndicator()
        : widgetToNavigate;
  },
);}