我不知道有什么简单的方法可以做到这一点,没有initialPositition
参数输入ListView
nor in 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,
),
),
],
);
}
在这两种情况下,这都是您首次打开应用程序时的结果。