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

Posted

技术标签:

【中文标题】如何让我们的列表持久化,同时在 Flutter 应用程序中导航到不同的屏幕?【英文标题】:How to make our list persistent, while navigating to different screens in flutter application? 【发布时间】:2020-03-25 01:13:06 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

是的,我已经使用了滚动控制器,默认情况下,属性 keepScrollOffset 已经为 true。您是否有任何来自 github 或其他我可以理解事情如何工作的代码的应用程序示例。谢谢你 请发布一个使用滚动控制器的示例应用【参考方案2】:

您可以使用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 Start\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n to... \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEnd', style: optionStyle, ), ], ), ), PageStorage( bucket: bucket, child: ListView( key: PageStorageKey<String>('1'), children: <Widget>[ Text( 'Index 1: Business Start\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n to... \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEnd', style: optionStyle, ), ], ), ), PageStorage( bucket: bucket, child: ListView( key: PageStorageKey<String>('2'), children: <Widget>[ Text( 'Index 2: School Start\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n to... \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEnd', style: optionStyle, ), ], ), ), ];

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

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

【讨论】:

【参考方案3】:

您可以使用PageStorageKey:

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

【讨论】:

以上是关于如何让我们的列表持久化,同时在 Flutter 应用程序中导航到不同的屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

删除项目后刷新列表 - Flutter

如何在 Flutter 中使用路由制作持久抽屉?

如何在 Flutter 中制作带有标题的多张卡片列表

在 Flutter 中保持响应的同时制作持久的背景图像

Flutter:如何删除等待以利用 Firebase 离线持久性?

使用 JAX,TFLite 和 Flutter 打造一个棋盘游戏