如何告诉 itemBuilder Flutter 中没有更多的项目?

How to tell itemBuilder there is no more items in Flutter?

flutter tutorial

中查看样本时
class RandomWordsState extends State<RandomWords> {
  ...
  Widget _buildSuggestions() {
    return new ListView.builder(
      padding: const EdgeInsets.all(16.0),

      itemBuilder: (context, i) {

        if (i.isOdd) return new Divider();

        final index = i ~/ 2;
        if (index >= _suggestions.length) {
          _suggestions.addAll(generateWordPairs().take(10));
        }
        return _buildRow(_suggestions[index]);
      }
    );
  }
}

我想知道是否有办法告诉 itemBuilder 没有更多的项目。例如,我只想在列表视图中显示 30 个项目,我该怎么做?

此构造函数中有一个 属性,名为 itemCount

您可以将其设置为您喜欢的任何值以限制 ListView.builder/ListView.separated 大小。

这是一个示例,将 ListView 限制为 30 个项目

Widget build(BuildContext context) {
  return ListView.builder(
    itemCount: 30,
    itemBuilder: (context, index) {
      return ListTile(title: Text('index: $index'));
    },
  );
}

当没有更多项目要构建时,您只需要在 itemBuilder 函数中添加 return null

要动态停止生成器,您只需 return null。但是,您必须使用 ListView.custom 传递一个委托,并在其中传递您的可为 null 的构建器 (NullableIndexedWidgetBuilder)。 ListView.builder 需要一个非空构建器 (IndexedWidgetBuilder)。

希望对您有所帮助:

Widget buildList() {
  return ListView.custom(
    childrenDelegate: SliverChildBuilderDelegate(itemBuilderFunction),
  );
}

Widget? itemBuilderFunction(BuildContext context, int i) {
  if (i.isOdd) {
    return const Divider();
  }

  final index = i ~/ 2;
  if (index >= _suggestions.length) {
    if (_suggestions.length < 100) { // limiting the list size to demonstrate
      _suggestions.addAll(generateWordPairs().take(10));
    }
  }

  if (index >= _suggestions.length) {
    return null;
  }

  return _buildRow(_suggestions[index]);
}