首页 > 解决方案 > 扑。在非常大的 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一样从某个元素开始?

谢谢!

标签: listviewdartflutter

解决方案


您可以设置ScrollController 的属性之一:initialScrollOffset

但前提是您知道目标项/索引的偏移位置。

ScrollController _controller = ScrollController(initialScrollOffset: itemHeight * index)

ListView.builder(
  controller: _controller,
  ...
),

请注意,此示例假定列表小部件的大小是恒定的,但如果您的列表中没有恒定的小部件大小,那么您必须能够计算目标项目的最终偏移位置 - 并且完全是另一个问题

或者,如果您希望它始终是最后一项/索引,那么它会容易得多:

ScrollController _controller = ScrollController(initialScrollOffset: _controller.position.maxScrollExtent)

推荐阅读