flutter - 使 ListView 滚动到一个偏移量
问题描述
我试图在 listView 的屏幕上显示顶部元素以完全显示或向上滚动。
child: NotificationListener<ScrollEndNotification>(
onNotification: (_) {
double h = 120;
double remaining = controller.position.pixels % h;
int offset = 0;
offset = (remaining > 60)
? ((controller.position.pixels ~/ h) + 1) * 120
: ((controller.position.pixels ~/ h)) * 120;
if (offset > 0)
controller.animateTo(offset.toDouble(),
duration: Duration(milliseconds: 500), curve: Curves.easeInOut);
return true;
},
child: ScrollConfiguration(
behavior: NoEffectScrollBehaviour(),
child: ListView.builder(
padding: EdgeInsets.zero,
controller: controller,
physics: BouncingScrollPhysics(),
itemBuilder: (c, i){.......}
但控制器没有滚动到指定位置。我怎样才能使它成为 listView Elenent 来显示或动画偏移?
编辑:
我正在滚动结束事件上进行转换。问题是我无法在 NotificationListner 中做到这一点。
解决方案
首先,您不需要 NotificationListener。您可以简单地使用以下方法。
如果你想滚动第一个元素或滚动到顶部,你可以使用
controller.animateTo(0,duration: Duration(milliseconds: 500), curve: Curves.easeInOut);
如果你想去特定的项目,你可以使用
final listItemHeight = 50;
final itemIndex = 3;
controller.animateTo(listItemHeight * itemIndex,duration: Duration(milliseconds: 500), curve: Curves.easeInOut);
推荐阅读
- python - 从“兄弟”类继承?
- salesforce - SOQL 查询 - 如何通过将字段设为小写和比较来编写 SOQL 查询?
- windows - 从 findstr 输出中排除前 20 个字符
- javascript - 为什么 'async1 end' 会在以下脚本中的 'promise2' 和 'promise3' 之后记录?
- amazon-web-services - 启动 Go 服务器后 CodeDeploy AfterInstall 钩子不退出
- php - 如何使用php一次验证两个表单
- python - 如何将图像和注释拆分为目标检测任务的训练集、测试集和验证集?
- linux-kernel - 在内核模块中使用 memcpy 更改作为参数传递给导出函数的缓冲区内容时出现内核错误
- python - 在 pyenv 中使用时 pip 不响应
- html - CSS flexbox 的基本对齐问题