在 Flutter ListView 中,我如何知道视图中第一个和最后一个项目的索引号?
In a Flutter ListView, how do I know the index number of the first and last items in view?
给定一个按一定偏移量滚动的 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 实际上并不是我想象的那样...
此信息不可用。
最多能得到RenderSliverList
(ListView
的下一层)已经布置的索引。
这相当于可见的东西 + 周围的潜在额外物。
截至 2020 年,我想这个问题的答案是使用 ScrollablePositionedList
(https://pub.dev/packages/scrollable_positioned_list) 而不是 ListView
.
然后您可以监控哪些项目在屏幕上可见:
itemPositionsListener.positions.addListener((positions) => ...);
给定一个按一定偏移量滚动的 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 实际上并不是我想象的那样...
此信息不可用。
最多能得到RenderSliverList
(ListView
的下一层)已经布置的索引。
这相当于可见的东西 + 周围的潜在额外物。
截至 2020 年,我想这个问题的答案是使用 ScrollablePositionedList
(https://pub.dev/packages/scrollable_positioned_list) 而不是 ListView
.
然后您可以监控哪些项目在屏幕上可见:
itemPositionsListener.positions.addListener((positions) => ...);