列出小部件,但不加载它们

时间:2019-12-02 16:26:26

标签: listview flutter

我有一个有状态的小部件列表:

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的小部件。目前,我正在遍历列表并通过此属性进行过滤。尽管如此,所有元素都是创建和构建的-不管是否必要。

由于我有很多不受欢迎的小部件,因此如果我对安全和时间方面不感兴趣,就避免构建所有这些小部件。

是否有一种方法可以创建这样的列表,而又不会创建其所有子级?还是可以仅将小部件的类名称保留在字符串列表中,并根据其名称创建相关的小部件?

1 个答案:

答案 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];
    })