我不知道执行此操作的简便方法,
initialPosititionin ListView和
in中都没有参数
SliverList。我能想到的原因是
列表是嵌入在上的一系列小部件
ScrollView,因此为了设置初始项目,您需要知道该项目的确切滚动偏移量。
默认情况下,这两个列表窗口小部件不对其项目的高度做任何假设,因此通常发现偏移量将要求您一一计算所有窗口小部件的高度,这效率很低。
但是,如果您事先知道所有列表项的高度,或者可以通过
ListView.itemExtent字段或强制它们固定高度,则可以使事情变得容易
SliverFixedExtentList。
如果你知道(或强迫)列表项的高度事前,您可以通过设置初始项目
initialScrollOffset在你的
ScrollController。这是带有的示例
ListView。
@overrideWidget 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.
@overrideWidget 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, ), ), ], );}在这两种情况下,这都是您首次打开应用程序时的结果。



