【问题标题】:Flutter. Set ListView initial position on an very large ListView扑。在非常大的 ListView 上设置 ListView 初始位置
【发布时间】:2019-09-11 22:42:21
【问题描述】:

我想创建一个几乎无限的元素列表,但我想将列表的初始位置设置为某个特定元素。像这样的图像:

其中索引 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;如何在1 中创建一个很长的 ListView 列表以从某个元素开始?

谢谢!

【问题讨论】:

  • 抱歉@JacobPhillips,这并不能解决我的问题,因为第一个答案的脚注说:“注意:虽然这允许轻松滚动到所需的项目,但考虑这种方法只适用于小预定义列表。对于更大的列表,您会遇到性能问题。”
  • 谢谢@diegoveloper,差不多了。但是那个插件强制我的列表是无限的
  • 每件商品的尺寸/尺寸是否相同?

标签: listview dart flutter


【解决方案1】:

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

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

ScrollController _controller = ScrollController(initialScrollOffset: itemHeight * index)

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多