我有一个有状态的小部件列表:
final List<MyWidget> _list = [
MyWidget(id: '1', title: 'One', isFav: true)),
MyWidget(id: '2', title: 'Two', isFav: false)),
MyWidget(id: '3', title: 'Three', isFav: false,
MyWidget(id: '4', title: 'Four', isFav: true))
];
这些小部件用于创建小部件选择器。因此,所有小部件都应在ListView
内列出,并且如果轻按一项,则应显示该小部件。
目前正在工作。
但是现在我有了属性isFav
。因此,我只想考虑带有isFav == true
的小部件。目前,我正在遍历列表并通过此属性进行过滤。尽管如此,所有元素都是创建和构建的-不管是否必要。
由于我有很多不受欢迎的小部件,因此如果我对安全和时间方面不感兴趣,就避免构建所有这些小部件。
是否有一种方法可以创建这样的列表,而又不会创建其所有子级?还是可以仅将小部件的类名称保留在字符串列表中,并根据其名称创建相关的小部件?
答案 0 :(得分:1)
只要您在构建方法之前过滤列表,就不会创建小部件
final _filteredList = _list.where((w) => w.isFav == true).toList();
您可能还想使用ListView.Builder
https://api.flutter.dev/flutter/widgets/ListView/ListView.builder.html
此构造函数适用于具有大量(或无限多个)子级的列表视图,因为仅针对那些实际可见的子级调用该构建器。
使用过滤后的列表,它看起来可能像这样
ListView.builder(
itemCount: _filteredList.length,
itemBuilder: (context, int index) {
return _filteredList[index];
})