我在调用太多电话以获取列表数据时遇到问题。
这是发生的事情(简化)。我有向我返回List<T>
的服务,其中T
是一个简单的对象,几乎没有属性(标题,颜色,键等)。
然后我有一个StatefulWidget
,在Widget build()
方法中,我正在调用API以返回数据,如下所示:
Widget build(BuildContext context) {
_masterCategories = _masterCategories ??
StaticListService.getItems(StaticItemType.masterCategory, context);
最后,我将此数组绑定到Wrap
小部件,该小部件显示Chip
元素的数组:
Wrap(
spacing: 8.0,
runSpacing: 4.0,
children: _masterCategories
.map((item) => _generateSimpleChip(context, item))
.toList()),
好的,一切正常!但是,我遇到一个小问题,当我单击某个Chip
项目并选择它时(我有一个简单的Set<String>
用于跟踪所有选定的筹码),结果是,显然,我的build
方法是重新构建。
这会重新调用我的API方法来检索我确定知道的项目,该项目与当前页面相同(除非我离开当前页面并返回,否则我可以保证项目不会更改)。
我尝试在initState()方法中填充我的List<T>
,但是该方法引发了错误:
在之前调用了inheritFromWidgetOfExactType(_LocalizationsScope) _DetailPageComponentState.initState()完成
正如您在我的代码(第一个代码块)中所看到的那样,我包括一个检查,检查数组是否包含值,如果不包含,则从API中获取值。
问题:
我想知道,是否有更好的方法来做到这一点?我已经尝试过FutureBuilder
,但结果却是相同的->在更改chip
项目的状态时,重新调用了Future,并重新填充了我不需要的项目。< / p>