3

给定一个滚动了一些偏移量的 ListView,我如何知道当前视图中的第一个和最后一个项目的索引号?

我试过这个:

class MySliverChildBuilderDelegate extends SliverChildBuilderDelegate {
  MySliverChildBuilderDelegate(IndexedWidgetBuilder builder, {int childCount})
      : super(builder, childCount: childCount);

  @override
  void didFinishLayout(int firstIndex, int lastIndex) {
    print("firstIndex = $firstIndex / lastIndex = $lastIndex");
  }
}

接着:

SliverChildBuilderDelegate childrenDelegate =
    MySliverChildBuilderDelegate(itemBuilder, childCount: childCount);

ListView.custom(
    controller: _controller,
    childrenDelegate: childrenDelegate));

但是那些 firstIndex 和 lastIndex 实际上并不是我所认为的......

4

2 回答 2

1

这个信息是不可用的。

RenderSliverList您可以获得的最多的是(的较低层)已布置的索引ListView

这相当于可见的内容+周围的潜在额外内容。

于 2018-07-08T21:53:15.073 回答
1

截至 2020 年,我想这个问题的答案是使用ScrollablePositionedList( https://pub.dev/packages/scrollable_positioned_list ) 而不是ListView.

然后您可以监控哪些项目在屏幕上可见:

itemPositionsListener.positions.addListener((positions) => ...);
于 2020-08-18T22:45:33.790 回答