我有一个获取请求,我将其作为未来传递给 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/memoize and https://api.flutter.dev/flutter/package-async_async/AsyncMemoizer-class.html但我认为它们已被弃用,因为它说 AsyncMemoizer 未定义(没有可用的导入选项)。
我也尝试过https://github.com/flutter/flutter/issues/11426#issuecomment-414047398但我想探索一个类似于 memoizer 的选项。
有没有其他方法可以只获取一次数据(类似于 memoizer)?
Use StatefulWidget
,然后创建一个Future
变量(如_getTaskAsync
) 里面State
.
Assign gettask()
到未来的变量initState
.
然后使用该变量作为参数FutureBuilder
(like future: _getTaskAsync
)
Code:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)