为了避免我的FutureBuilder
被一次又一次地调用(参见this),我有一个在initState
中调用我的未来的习惯,它一直很好,直到我不得不使用嵌套的。
基本上我希望第二个未来只有在第一个的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
。
在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;
},
);}