如果用户在使用网页版时刷新浏览器,所有 ValueNotifire 都会消失,但如果使用共享首选项或其他本地数据库,则不存在此问题。 有什么解决方案可以使 ValueNotifires 不被清除? 有关信息,我使用 flutter-go-router
颤振SDK:3.22.1 Dart SDK:3.4.1
Sharedprefs 和其他本地数据库使用磁盘存储,这就是为什么您需要在使用之前
await SharedPreferences.getInstance()
。 ValueNotifiers 仅存在于内存中。您需要将 ValueNotifier 内容存储在某个持久的位置,然后在应用程序或小部件加载时重新填充它们。
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class CountWidget extends StatefulWidget {
const CountWidget({super.key});
@override
State<CountWidget> createState() => _CountWidgetState();
}
class _CountWidgetState extends State<CountWidget> {
final ValueNotifier<int> count = ValueNotifier<int>(0);
@override
void initState() {
super.initState();
count.addListener(() {
setState(() {});
});
_initializeCount();
}
Future<void> _initializeCount() async {
final prefs = await SharedPreferences.getInstance();
final storedCount = prefs.getInt('foo_count');
if (storedCount != null) {
count.value = storedCount;
if (mounted) {
setState(() {});
}
}
}
@override
void dispose() {
count.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Text(count.toString());
}
}