如何使用嵌套的 FutureBuilders 并确保一个 future 被另一个调用?

Kee*_*ani 6 asynchronous future flutter

为了避免FutureBuilder一次又一次地被调用(请参阅),我有调用我的 future 的习惯,initState并且它一直工作得很好,直到我不得不使用嵌套的 future。

connectionState基本上我希望第二个 future 仅在第一个 future成为 后才被调用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();
                });
  },
);
Run Code Online (Sandbox Code Playgroud)

_future2所以基本上,如果收到的数据不是 200 ,我根本不想被调用_future1。换句话说,我想_future2根据 的结果决定是否应该被调用_future1

Kee*_*ani 2

在 中initState,我这样做 -

_future1 = func.then(checkCode);
Run Code Online (Sandbox Code Playgroud)

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

checkCode(int statusCode) {
if (statusCode == 200) {
  _future2Func();
  widgetToNavigate = Text('');
} else {
  widgetToNavigate = SomeWidget();
}}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在“build()”方法中使用一个“FutureBuilder”,当“Future”完成时,该方法会构建“CircularProgressIndicator”或“YourFinalWidget” (2认同)