Flutter如何使用shared_preferences插件
如何在Flutter项目中正确使用shared_preferences插件存储和读取数据?我按照官方文档添加了依赖并进行了基本配置,但在读取数据时总是返回null。请问是否需要额外初始化?存储复杂对象时应该怎么处理?能否提供一个完整的示例代码,包括写入、读取和删除数据的操作步骤?
2 回复
在Flutter中使用shared_preferences插件:
- 添加依赖到pubspec.yaml:
dependencies:
shared_preferences: ^2.0.0
- 导入包:
import 'package:shared_preferences/shared_preferences.dart';
- 基本用法:
// 保存数据
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('key', 'value');
// 读取数据
String? value = prefs.getString('key');
支持存储字符串、整型、布尔值等数据类型。
更多关于Flutter如何使用shared_preferences插件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用shared_preferences插件可以轻松存储和读取简单的键值对数据,适用于保存用户设置、登录状态等轻量数据。以下是详细步骤和示例代码:
1. 添加依赖
在 pubspec.yaml 文件中添加依赖:
dependencies:
shared_preferences: ^2.2.2
运行 flutter pub get 安装插件。
2. 基本用法
import 'package:shared_preferences/shared_preferences.dart';
// 保存数据
Future<void> saveData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('username', 'John'); // 字符串
await prefs.setInt('age', 25); // 整型
await prefs.setBool('isLoggedIn', true); // 布尔值
await prefs.setDouble('height', 1.75); // 浮点数
await prefs.setStringList('hobbies', ['Reading', 'Gaming']); // 字符串列表
}
// 读取数据
Future<void> readData() async {
final prefs = await SharedPreferences.getInstance();
String? username = prefs.getString('username'); // 返回可为null的值
int? age = prefs.getInt('age');
bool? isLoggedIn = prefs.getBool('isLoggedIn');
print('Username: $username'); // 输出: Username: John
}
// 删除数据
Future<void> removeData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove('username'); // 删除指定键
// await prefs.clear(); // 清空所有数据
}
3. 完整示例
class SettingsPage extends StatefulWidget {
@override
_SettingsPageState createState() => _SettingsPageState();
}
class _SettingsPageState extends State<SettingsPage> {
String _username = '';
@override
void initState() {
super.initState();
_loadUsername();
}
_loadUsername() async {
final prefs = await SharedPreferences.getInstance();
setState(() {
_username = prefs.getString('username') ?? '未设置';
});
}
_updateUsername(String name) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('username', name);
_loadUsername(); // 重新加载显示
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Text('当前用户: $_username'),
ElevatedButton(
onPressed: () => _updateUsername('李四'),
child: Text('更新用户名'),
),
],
),
);
}
}
注意事项:
- 所有操作都是异步的,需要使用
await - 读取数据时返回可为null的类型(如
String?) - 适合存储小型数据,大型数据建议使用数据库
- iOS/Android会自动持久化数据,Web端依赖浏览器localStorage
通过以上方法即可快速实现轻量级数据持久化存储。

