Flutter如何使用shared_preferences插件
在Flutter项目中集成shared_preferences插件时遇到问题:按照官方文档添加依赖并同步后,调用SharedPreferences.getInstance()始终返回null。已确认AndroidManifest.xml中配置了正确权限,iOS端也添加了必要设置。尝试过flutter clean和重新安装插件仍无效。请问如何正确初始化shared_preferences?是否需要在main()中做异步处理?存储复杂对象时是否需要手动序列化?
        
          2 回复
        
      
      
        使用shared_preferences存储数据:
- 添加依赖:flutter pub add shared_preferences
- 导入包:import 'package:shared_preferences/shared_preferences.dart';
- 使用:
- 保存:prefs.setString('key', 'value')
- 读取:prefs.getString('key')
- 删除:prefs.remove('key')
 
- 保存:
记得用await调用异步方法。
更多关于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);   // 存储布尔值
}
// 读取数据
Future<void> readData() async {
  final prefs = await SharedPreferences.getInstance();
  String? username = prefs.getString('username'); // 读取字符串
  int? age = prefs.getInt('age');                 // 读取整型
  bool? isLoggedIn = prefs.getBool('isLoggedIn'); // 读取布尔值
  
  print('用户名: $username, 年龄: $age, 登录状态: $isLoggedIn');
}
// 删除数据
Future<void> deleteData() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.remove('username'); // 删除指定键
  // await prefs.clear();         // 清空所有数据
}
3. 完整示例
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
  String _username = '';
  @override
  void initState() {
    super.initState();
    _loadUsername();
  }
  _loadUsername() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _username = prefs.getString('username') ?? '未设置';
    });
  }
  _updateUsername() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString('username', '李四');
    _loadUsername(); // 重新加载显示
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          children: [
            Text('当前用户: $_username'),
            ElevatedButton(
              onPressed: _updateUsername,
              child: Text('更新用户名'),
            ),
          ],
        ),
      ),
    );
  }
}
注意事项:
- 异步操作:所有方法都是异步的,需使用 await或.then()
- 空安全:读取数据时可能返回 null,建议使用??提供默认值
- 数据类型:支持 String、int、double、bool、StringList
- 存储限制:不适合存储大量数据,大型数据建议使用数据库
通过以上方法即可快速实现轻量级本地数据存储功能。
 
        
       
             
             
            

