面试题答案
一键面试实现步骤
- 添加依赖:
在
pubspec.yaml
文件中添加shared_preferences
依赖:
dependencies:
shared_preferences: ^2.0.15
然后运行 flutter pub get
下载依赖。
2. 导入库:
在需要使用的 Dart 文件中导入 shared_preferences
库:
import 'package:shared_preferences/shared_preferences.dart';
- 写入数据:
Future<void> writeData() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
// 写入字符串数据
await prefs.setString('key', 'value');
// 写入整数数据
await prefs.setInt('intKey', 123);
// 写入布尔数据
await prefs.setBool('boolKey', true);
// 写入双精度浮点数数据
await prefs.setDouble('doubleKey', 3.14);
// 写入字符串列表数据
await prefs.setStringList('listKey', ['item1', 'item2']);
}
- 读取数据:
Future<void> readData() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
// 读取字符串数据
String? stringValue = prefs.getString('key');
// 读取整数数据
int? intValue = prefs.getInt('intKey');
// 读取布尔数据
bool? boolValue = prefs.getBool('boolKey');
// 读取双精度浮点数数据
double? doubleValue = prefs.getDouble('doubleKey');
// 读取字符串列表数据
List<String>? stringListValue = prefs.getStringList('listKey');
}
常见问题及解决办法
- 异步操作问题:
- 问题描述:
SharedPreferences
的getInstance
、set
和get
等方法都是异步的,如果处理不当可能导致数据读取或写入顺序错误。 - 解决办法:使用
async/await
确保操作按顺序执行,或者使用Future.then
链式调用处理异步结果。
- 问题描述:
- 类型转换问题:
- 问题描述:读取数据时,如果存储的数据类型与预期读取的类型不匹配,可能会得到
null
或者抛出异常。 - 解决办法:在写入数据时明确数据类型,读取时使用对应的
get
方法(如getString
、getInt
等),并且对可能为null
的返回值进行适当的处理。
- 问题描述:读取数据时,如果存储的数据类型与预期读取的类型不匹配,可能会得到
- 数据持久化问题:
- 问题描述:虽然
SharedPreferences
用于持久化存储,但在某些情况下(如设备存储满、应用被卸载等)可能导致数据丢失。 - 解决办法:可以考虑对重要数据进行备份或者使用其他更可靠的持久化方案(如 SQLite 数据库)作为补充。
- 问题描述:虽然
- 初始化失败问题:
- 问题描述:
SharedPreferences.getInstance()
可能会因为一些系统原因初始化失败。 - 解决办法:在调用
getInstance
时捕获异常并进行适当处理,例如提示用户相关错误信息。
- 问题描述:
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
// 后续操作
} catch (e) {
// 处理异常
print('SharedPreferences 初始化失败: $e');
}