Flutter中如何使用SharedPreferences存储数据

在Flutter中如何使用SharedPreferences存储和读取简单数据?比如我想保存用户的登录状态或一些简单的配置信息,但不太清楚具体怎么实现。是否需要添加额外的依赖包?能否提供一个完整的代码示例,包括初始化、保存数据和读取数据的步骤?另外,SharedPreferences存储的数据类型有哪些限制?

2 回复

在Flutter中使用SharedPreferences存储数据,需先添加依赖shared_preferences。然后通过SharedPreferences.getInstance()获取实例,使用setStringgetString等方法读写数据。例如:prefs.setString('key', 'value')

更多关于Flutter中如何使用SharedPreferences存储数据的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用SharedPreferences存储数据,可以通过以下步骤实现:

  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'); // 删除指定键
    }
    
    // 清空所有数据
    Future<void> clearData() async {
      final prefs = await SharedPreferences.getInstance();
      await prefs.clear();
    }
    
  3. 注意事项

    • SharedPreferences适用于存储简单数据(如字符串、数字、布尔值)。
    • 所有操作都是异步的,需使用await
    • 存储复杂数据(如对象)需先序列化为字符串(如使用jsonEncode)。

示例:存储自定义对象

class User {
  final String name;
  final int age;

  User(this.name, this.age);

  Map<String, dynamic> toJson() => {'name': name, 'age': age};
  static User fromJson(Map<String, dynamic> json) => User(json['name'], json['age']);
}

// 存储对象
Future<void> saveUser(User user) async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('user', jsonEncode(user.toJson()));
}

// 读取对象
Future<User?> getUser() async {
  final prefs = await SharedPreferences.getInstance();
  String? userJson = prefs.getString('user');
  if (userJson != null) {
    return User.fromJson(jsonDecode(userJson));
  }
  return null;
}

通过以上方法,可以高效地在Flutter应用中实现轻量级数据持久化存储。

回到顶部