【发布时间】:2021-05-05 02:01:45
【问题描述】:
我在尝试将 FutureBuilder 与 Provider 和缓存一起使用时遇到了问题。 计算完成一次,然后将其缓存。代码如下所示:
FutureBuilder(
future: model.calculateStats(chartType: getChartType()),
builder: (context, snapshot) {
if(snapshot.connectionState != ConnectionState.done) {
return Center(
child: CircularProgressIndicator()
);
}
return buildChart(model);
},
)
那段代码在一个带有 ViewModel 的 Consumer 内部,它的方法是 calculateStats,如下所示:
Future calculateStats({ChartType chartType = ChartType.Monthly}) async {
return await MemoryCache.instance.getOrCreateAsync("stats:${chartType.index}", () async {
var statsMaker = StatsMaker(chartType: chartType);
this._currentStats = await statsMaker.generate(
startDate: _getStartDateForChartType(chartType),
endDate: DateTime.now()
);
}, allowNull: true);
}
在这里您可以看到正在发生的事情的视频:https://i.imgur.com/SWQ7N7P.mp4
辅助类 MemoryCache 检查提供的键是否在映射中,如果是,则返回值而不进行任何计算,应立即返回,如果未找到,则等待未来并存储结果.但是在这里,虽然结果被缓存了,但 FutureBuilder 显示了加载指示器(在视频中是橙色的)。我做错了什么?
【问题讨论】:
标签: flutter flutter-provider flutter-futurebuilder