如何在 FutureBuilder 的 Future.wait 函数中缓存 Future 以不每次状态更改时重建



我想使用多个Future,所以我实现了Future。

但是当页面状态改变时,它会继续重建。如何在Future中缓存期货。等待?

代码如下:

GetBuilder<OrdersMainController>(builder: (controller) {
return FutureBuilder(
future: Future.wait([controller.ordersFuture.value]),// lets me use multiple futures
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.active:
case ConnectionState.waiting:
case ConnectionState.done:
if (snapshot.hasError) {
return SizedBox(
width: double.infinity,
height: 600,
child: Center(
child: Text(snapshot.error.toString(),
style:
Theme.of(context).textTheme.caption!)));
}
controller.ordersData.value = (snapshot.data! as List)[0];
final DataTableSource _data =
OrdersMainSource(controller.ordersData.value.data!);
return ...
default:
return ...;
}
});
})

不要在每次构建时调用Future.wait(),而是使用StatefulWidget并在其状态中缓存计算(注意状态对象在重建中存活)。

class _MyWidgetState extends State<MyWidget> {
late final lotsOfData=Future.wait([controller.ordersFuture.value])
@override
Widget build(BuildContext context) {
.....
return FutureBuilder(
future: lotsOfData,

通过将lotsOfData声明为内部的末变量实际缓存它的State对象。通过宣布延迟,你不会急切地启动期货,而是在第一次访问时启动。