如果我必须手动完成,我应该什么时候保存滚动位置?(在原生 Android 应用程序中,我会在 onPause Activity 生命周期方法中执行此操作。)
您可以使用 mixin WidgetsBindingObserver通过侦听AppLifecycleState来检测您的应用程序何时进入后台以及何时进入前台
可观察的生命周期事件是:
- paused — 应用程序当前对用户不可见,不响应用户输入,并且在后台运行。就像
onPause()
在 Android中一样
- 非活动 - 应用程序处于非活动状态并且未接收用户输入。(仅限IOS)
- resumed — 应用程序可见并响应用户输入。就像
onPostResume()
在 Android中一样
- 暂停 - 应用程序将暂时暂停。(仅限安卓)
在示例中,我保存日期而不是滚动位置
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');
}
...