gpt4 book ai didi

android - 如何在应用重启之间保存和恢复 Flutter ListView 的滚动位置?

转载 作者:行者123 更新时间:2023-11-29 22:51:04 30 4
gpt4 key购买 nike

我想保留 ListView 的滚动位置,以便在应用重启之间恢复。

所以我想它应该使用类似shared_preferences 的东西保存在磁盘上(在 iOS 上的 NSUserDefaults 和 Android 上的 SharedPreferences 中)

是否有内置的方式(或插件)来做到这一点?

如果我必须手动执行,我应该什么时候保存滚动位置? (在原生 Android 应用程序中,我会在 onPause Activity 生命周期方法中执行此操作。)

我搜索了很多,似乎找不到任何说明如何保存和恢复 ListView 的滚动位置的帖子或示例代码。

最佳答案

If I have to do it manually, when should I save the scroll position? (In a native Android app I would do it in the onPause Activity life-cycle method.)

你可以使用 mixin WidgetsBindingObserver通过监听检测您的应用程序何时进入后台以及何时进入前台 AppLifecycleState

可观察的生命周期事件是:

  • 暂停 — 应用程序当前对用户不可见,不响应用户输入,并在后台运行。类似于Android中的onPause()
  • inactive — 应用程序处于非 Activity 状态并且不接收用户输入。 (仅限 IOS)
  • resumed — 应用程序可见并响应用户输入。类似于Android中的onPostResume()
  • suspending — 应用程序将暂时挂起。 (仅限安卓)

在示例中我保存日期而不是滚动位置

class _TestPageState extends State<TestPage> with WidgetsBindingObserver {

SharedPreferences prefs;

@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}

@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print('state = $state'); // resumed, paused, inactive, suspending
if (state == AppLifecycleState.paused) {
prefs.setString('date', DateTime.now().toIso8601String());
}
}

_TestPageState() {
initPrefs();
}

void initPrefs() async {
prefs = await SharedPreferences.getInstance();
print(prefs.getString('date') ?? 'no date');
}
...

关于android - 如何在应用重启之间保存和恢复 Flutter ListView 的滚动位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57902923/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com