为避免一次又一次调用我的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
的结果来调用。
答案 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;
},
);}