gpt4 book ai didi

flutter - 使用 FutureBuilder 时如何只获取一次数据?

转载 作者:行者123 更新时间:2023-12-02 00:08:19 25 4
gpt4 key购买 nike

我有一个获取请求,我将它作为 future 传递给 FutureBuilder -

FutureBuilder(
future: gettask(),
builder: (context, snapshot){
if(snapshot.hasData){

// Stopwatch stopwatchbefore = new Stopwatch()..start();
// print('futurebuilder executed in ${stopwatchbefore.elapsed}');

return SingleChildScrollView(child: listViewWidget(snapshot.data));

}else{
return Center(child: CircularProgressIndicator());
}
},
)

然而,方法 gettask() 似乎在重复获取事件。我尝试使用 https://pub.dev/packages/memoizehttps://api.flutter.dev/flutter/package-async_async/AsyncMemoizer-class.html但我认为它们已被弃用,因为它说 AsyncMemoizer 未定义(没有可用的导入选项)。

我也试过https://github.com/flutter/flutter/issues/11426#issuecomment-414047398但我想探索一个类似于 memoizer 的选项。

除了只获取一次数据(类似于 memoizer 的东西)之外,还有其他选择吗?

最佳答案

使用 StatefulWidget,然后在 State 中创建一个 Future 变量(如 _getTaskAsync)。

gettask() 分配给 initState 中的 future 变量。

然后将该变量用作 FutureBuilder 的参数(如 future: _getTaskAsync)

代码:

class _MyStatefulWidgetState extends State<MyStatefulWidget> {

Future _getTaskAsync;

...

@override
void initState() {
_getTaskAsync = gettask();
super.initState();
}

...

FutureBuilder(
future: _getTaskAsync,
builder: (context, snapshot) {
if (snapshot.hasData) {
//Stopwatch stopwatchbefore = new Stopwatch()..start();
//print('futurebuilder executed in ${stopwatchbefore.elapsed}');

return SingleChildScrollView(child: listViewWidget(snapshot.data));
} else {
return Center(child: CircularProgressIndicator());
}
},
);

引用document

关于flutter - 使用 FutureBuilder 时如何只获取一次数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59859523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com