flutter - 如何在颤动中获取列表视图的滚动索引号?
问题描述
我在颤振应用程序中使用下面的列表视图构建器代码,我需要在滚动时获取列表中项目的索引。就像onPageChanged:(){}
使用时的功能PageView.Builder
return ListView.builder(
itemCount: posts.length,
itemBuilder: (context, index) {
final item = posts[index];
return Post(index: index, title: 'Test', imageUrl: 'https://www.google.com',);
},
);
我怎么能得到那个?
解决方案
没有这么简单的方法可以做到这一点,但您可以VisibilityDetector
从visibility_detector包中使用:
您可以通过将每个列表项用VisibilityDetector
.
itemBuilder: (context, index) {
return VisibilityDetector(
key: Key(index.toString()),
onVisibilityChanged: (VisibilityInfo info) {
if (info.visibleFraction == 1)
setState(() {
_currentItem = index;
print(_currentItem);
});
},
child: Post(index: index, title: 'Test', imageUrl: 'https://www.google.com',)
);
},
_currentItem
是主小部件状态中的一个变量,用于存储最后一个可见项的索引:
int _currentItem = 0;
注意:这是基于滚动方向的,即最后一个可见项的索引等于滚动后最后一个可见项的索引;如果向前滚动,它是屏幕底部的项目的索引,但如果是反向滚动,它是屏幕顶部的项目的索引。不过,这个逻辑可以很容易地改变(例如,使用队列来存储所有可见项目)。
推荐阅读
- c# - 嵌套集合匹配另一个集合的实体框架核心查询返回错误结果
- c# - 在 GridView 中设置 DropDownList 的选定值
- python - 如何在 Numpy/Python 中对序列进行切片并获取它们的频率
- python - 线性搜索未返回预期输出
- javascript - discord.js v13 | 无法获取目标用户的信息
- javascript - Redux 子应用之间的通信。反应原生
- snowflake-cloud-data-platform - 按顺序可重复迁移
- c++ - 如何使用 PCL 从点云中删除点?
- groovy - Groovy:Map 的断言失败
? - python - Multiprocessing.Pool() 卡住