如何使我们的列表持久化,同时在颤振应用程序中导航到不同的屏幕?



在我的颤振应用程序中,底部导航栏存在,并且有两个底部导航栏项。我在两个屏幕上都使用列表视图。当我在该屏幕上滚动一段时间后从一个屏幕导航到另一个屏幕时。我回到了名单的顶部,而不是我离开的最后一个位置。如何在两个屏幕上执行持久性?

您可以将 keepScrollOffset 设置为 true。 https://api.flutter.dev/flutter/widgets/ScrollController-class.html

您可以使用PageStoragePageBucket来保存ListView的滚动偏移量。

工作示例是 https://codepen.io/ntaoo/pen/LYpyrZJ .

基本部分如下,

final bucket = PageStorageBucket(); _widgetOptions = <Widget>[ PageStorage( bucket: bucket, child: ListView( key: PageStorageKey<String>('0'), children: <Widget>[ Text( 'Index 0: Home Startnnnnnnnnnnnnnnnnnnnnnnnn to... nnnnnnnnnnnnnnnnnnnnnnnnEnd', style: optionStyle, ), ], ), ), PageStorage( bucket: bucket, child: ListView( key: PageStorageKey<String>('1'), children: <Widget>[ Text( 'Index 1: Business Startnnnnnnnnnnnnnnnnnnnnnnnn to... nnnnnnnnnnnnnnnnnnnnnnnnEnd', style: optionStyle, ), ], ), ), PageStorage( bucket: bucket, child: ListView( key: PageStorageKey<String>('2'), children: <Widget>[ Text( 'Index 2: School Startnnnnnnnnnnnnnnnnnnnnnnnn to... nnnnnnnnnnnnnnnnnnnnnnnnEnd', style: optionStyle, ), ], ), ), ];

ScrollController测试代码是keepScrollOffset'的完美使用示例。

https://github.com/flutter/flutter/blob/master/packages/flutter/test/widgets/scroll_controller_test.dart#L313

您可以使用 PageStorageKey:

@override
Widget build(BuildContext context) {
return ListView.builder(
key: new PageStorageKey('key_name'),
itemBuilder: ...
);
}

最新更新