您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

flutter - SliverList / SliverChildBuilderDelegate supply initial index orallow negative indices

flutter - SliverList / SliverChildBuilderDelegate supply initial index orallow negative indices

我不知道执行此操作的简便方法initialPosititionin ListViewin中都没有参数SliverList。我能想到的原因是 列表是嵌入在上的一系列小部件ScrollView,因此为了设置初始项目,您需要知道该项目的确切滚动偏移量。

认情况下,这两个列表窗口小部件不对其项目的高度做任何假设,因此通常发现偏移量将要求您一一计算所有窗口小部件的高度,这效率很低。

但是,如果您事先知道所有列表项的高度,或者可以通过ListView.itemExtent字段或强制它们固定高度,则可以使事情变得容易SliverFixedExtentList

如果你知道(或强迫)列表项的高度事前,您可以通过设置初始项目initialScrollOffset在你的ScrollController。这是带有的示例ListView

@override
Widget build(BuildContext context) {
  final _itemExtent = 56.0; // I kNow item heights beforehand
  final generatedList = List.generate(500, (index) => 'Item $index');

  return ListView(
    controller: ScrollController(initialScrollOffset: _itemExtent * 401),
    children: generatedList
        .map((index) =>
            ListTile(title: Text(index, style: TextStyle(fontSize: 20.0))))
        .toList(),
  );
}

Or in a SliverList.

@override
Widget build(BuildContext context) {
  final _itemExtent = 56.0;
  final generatedList = List.generate(500, (index) => 'Item $index');

  return CustomScrollView(
    controller: ScrollController(initialScrollOffset: _itemExtent * 401),
    slivers: [
      SliverFixedExtentList(
        itemExtent: _itemExtent,  // I'm forcing item heights
        delegate: SliverChildBuilderDelegate(
          (context, index) => ListTile(
                title: Text(
                  generatedList[index],
                  style: TextStyle(fontSize: 20.0),
                ),
              ),
          childCount: generatedList.length,
        ),
      ),
    ],
  );
}

在这两种情况下,这都是您首次打开应用程序时的结果。

其他 2022/1/1 18:14:33 有433人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶