listview - 扑。在非常大的 ListView 上设置 ListView 初始位置
问题描述
我想创建一个几乎无限的元素列表,但我想将列表的初始位置设置为某个特定元素。像这样的图像:
其中索引 0 将是初始位置,并且此列表可能会或可能不会在两个方向上延伸很长。
我可以创建我的元素,例如:
Widget build_tile(int i){
return Container(child:Text(i.toString()));
}
我的清单会是这样的
ListView.builder(
itemBuilder: (context, i) {
return build_tile(i-offset);
},
scrollDirection: Axis.horizontal,
),
对于图片中的示例,偏移量为 2,但是如何设置列表的开始位置?
TLDR;如何制作一个非常长的列表 ListView 像1一样从某个元素开始?
谢谢!
解决方案
您可以设置ScrollController 的属性之一:initialScrollOffset
但前提是您知道目标项/索引的偏移位置。
ScrollController _controller = ScrollController(initialScrollOffset: itemHeight * index)
ListView.builder(
controller: _controller,
...
),
(请注意,此示例假定列表小部件的大小是恒定的,但如果您的列表中没有恒定的小部件大小,那么您必须能够计算目标项目的最终偏移位置 - 并且完全是另一个问题)
或者,如果您希望它始终是最后一项/索引,那么它会容易得多:
ScrollController _controller = ScrollController(initialScrollOffset: _controller.position.maxScrollExtent)
推荐阅读
- php - 在 PHP 单元测试中设置环境变量
- mysql - 删除连接表中的重复项
- c# - C#异步等待未完成
- c# - 缩进
section not being recognized
- excel - Storing 1000 cells of formulas into a variable VBA
- azure-devops - Azure DevOps Default Dashboard?
- python - how handle this error that i am facing when trying to write from SQL to Kudu via Pyspark
- xml - 递归定义元素内的 XSD 元素
- java - 如何在两个不同的类中使用相同的方法(带有 Scenebuilder 的 JavaFX)?
- movesense - Movesense:如何确定 mac os x 上的 wbcmd 端口