Flutter如何使用shared_preferences插件

如何在Flutter项目中正确使用shared_preferences插件存储和读取数据?我按照官方文档添加了依赖并进行了基本配置,但在读取数据时总是返回null。请问是否需要额外初始化?存储复杂对象时应该怎么处理?能否提供一个完整的示例代码,包括写入、读取和删除数据的操作步骤?

2 回复

在Flutter中使用shared_preferences插件:

  1. 添加依赖到pubspec.yaml:
dependencies:
  shared_preferences: ^2.0.0
  1. 导入包:
import 'package:shared_preferences/shared_preferences.dart';
  1. 基本用法:
// 保存数据
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('更新用户名'),
          ),
        ],
      ),
    );
  }
}

注意事项:

  1. 所有操作都是异步的,需要使用 await
  2. 读取数据时返回可为null的类型(如 String?
  3. 适合存储小型数据,大型数据建议使用数据库
  4. iOS/Android会自动持久化数据,Web端依赖浏览器localStorage

通过以上方法即可快速实现轻量级数据持久化存储。

回到顶部