Flutter 本地存储SharedPreferences技巧
在使用Flutter的SharedPreferences进行本地存储时,如何高效地存储和读取复杂数据结构(如List或Map)?我发现直接存储对象会报错,是否有推荐的序列化方法?另外,SharedPreferences的异步操作会导致页面初始化时数据未加载完成,有什么最佳实践能确保数据在Widget构建前就准备好?不同版本间的数据兼容性问题又该如何处理?
3 回复
Flutter中使用SharedPreferences进行本地存储的几个实用技巧:
- 初始化封装 建议封装初始化代码以避免重复调用:
Future<SharedPreferences> getPrefs() async {
return await SharedPreferences.getInstance();
}
- 类型安全操作 使用类型明确的读写方法:
// 写入
prefs.setInt('counter', 10);
prefs.setString('name', 'Flutter');
prefs.setBool('isDarkMode', true);
// 读取
int count = prefs.getInt('counter') ?? 0;
- 批量操作 使用commit()进行批量写入:
await prefs.setInt('counter', 10)
.then((_) => prefs.setString('name', 'Flutter'))
.then((_) => prefs.setBool('isDarkMode', true));
- 安全删除 删除数据前先检查是否存在:
if(prefs.containsKey('key')) {
await prefs.remove('key');
}
- 复杂数据存储 存储JSON数据:
// 写入
prefs.setString('user', jsonEncode(user.toJson()));
// 读取
Map userMap = jsonDecode(prefs.getString('user') ?? '{}');
注意事项:
- SharedPreferences不适合存储大量数据
- iOS最大支持约1MB数据
- Android默认存储在XML文件中
- 考虑使用hive或sqflite处理更复杂的数据