Flutter 本地存储 SharedPreferences 的使用

Flutter Shared Preferences:本地存储与登录工具实例
本文介绍了如何在Flutter中使用shared_preferences插件进行本地存储,重点讲解了如何创建和操作用户ID的工具类,以及正确异步获取值的方法。

1.添加插件引用 :

shared_preferences: ^2.0.3 # 本地存储插件

2.使用 :

import 'package:shared_preferences/shared_preferences.dart';
//存值的方法和类型
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(key, value)
prefs.setBool(key, value)
prefs.setDouble(key, value)
prefs.setInt(key, value)
prefs.setStringList(key, value)
//取值的方法和类型
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.getBool(key);
prefs.getDouble(key);
prefs.getInt(key);
prefs.getString(key);
prefs.getStringList(key);
//移除和清空
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove(key); //删除指定键
prefs.clear();//清空键值对

3.通过这些可以写一个自己需要的工具类:

import 'package:shared_preferences/shared_preferences.dart';

///数据库相关的工具
class LoginPrefs {

  static const String USER_ID = "USER_ID";//用户ID

  ///保存用户
  static void saveUseId(String _useid) async {
    SharedPreferences sp = await SharedPreferences.getInstance();
    sp.setString(USER_ID,_useid);
  }
  static Future  getUseId() async {
    SharedPreferences sp = await SharedPreferences.getInstance();
    return sp.getString(USER_ID);
  }

}

下面如何使用工具类取值呢?

需要在使用的地方写一个异步的方法获取,如果直接获取会报错。

mUserId = LoginPrefs.getUseId();//直接获取

报错:Flutter : 'Future <dynamic>' is not a subtype of type String

//异步方法获取

initPrefs() async {
  mUserId = await LoginPrefs.getUseId();
}

<think>我们正在处理用户关于Flutter使用SharedPreferences存储文本的查询。 根据引用[1],我们知道SharedPreferences用于简单的键值对存储,并且有一个完整实例代码的引用。 引用[2]和[3]提到了文件存储,但用户的问题明确是关于SharedPreferences的,所以我们主要关注引用[1]。 用户要求存储文本,而SharedPreferences正好适用于存储基本数据类型,包括字符串(文本)。 步骤: 1. 添加依赖:在pubspec.yaml文件中添加shared_preferences库。 2. 导入包:在需要使用SharedPreferences的Dart文件中导入包。 3. 存储数据:通过SharedPreferences实例调用setString方法存储文本。 4. 读取数据:通过getString方法读取存储的文本。 我们按照示例结构来回答: - 首先,简要介绍SharedPreferences。 - 然后,分步骤说明如何存储和读取文本。 - 提供代码示例(注意:由于用户要求存储文本,我们将使用字符串存储)。 - 最后,生成相关问题。 注意:引用[1]提到了错误处理,我们也要在代码中展示。 代码示例将包括: - 获取SharedPreferences实例(异步操作)。 - 使用setString存储数据。 - 使用getString读取数据。 - 错误处理(如try-catch)。 由于用户要求存储文本,我们以存储一个字符串为例。 另外,根据引用[3],我们不需要处理目录,因为SharedPreferences内部处理了存储位置。 现在,构建回答: </think>### Flutter使用SharedPreferences存储文本的方法 SharedPreferencesFlutter中用于存储简单键值对数据的轻量级解决方案,特别适合存储文本、布尔值等基本数据类型。以下是具体操作步骤: #### 1. **添加依赖** 在`pubspec.yaml`中添加依赖: ```yaml dependencies: shared_preferences: ^2.2.2 # 请使用最新版本 ``` 运行`flutter pub get`安装 #### 2. **存储文本数据** ```dart import 'package:shared_preferences/shared_preferences.dart'; // 存储文本 Future<void> saveText(String key, String value) async { try { final prefs = await SharedPreferences.getInstance(); await prefs.setString(key, value); // 核心存储方法 print('文本存储成功'); } catch (e) { print('存储失败: $e'); } } // 调用示例 saveText('user_token', 'abc123xyz'); // 存储登录凭证 saveText('welcome_msg', '您好,欢迎使用APP'); // 存储欢迎语 ``` #### 3. **读取文本数据** ```dart // 读取文本 Future<String?> readText(String key) async { try { final prefs = await SharedPreferences.getInstance(); return prefs.getString(key); // 核心读取方法 } catch (e) { print('读取失败: $e'); return null; } } // 调用示例 final token = await readText('user_token'); final welcome = await readText('welcome_msg'); print('令牌: $token'); // 输出: 令牌: abc123xyz ``` #### 4. **删除数据** ```dart Future<void> deleteText(String key) async { final prefs = await SharedPreferences.getInstance(); await prefs.remove(key); // 删除指定键 } ``` #### 关键特性说明 - **存储位置**:数据存储在设备本地,iOS使用`NSUserDefaults`,Android使用`SharedPreferences`[^2] - **数据限制**:适合存储小文本(最大支持几百KB),不适合存储大文件[^1] - **异步操作**:所有方法均需`async/await`处理 - **支持类型**:除文本外,还支持`int`、`double`、`bool`等类型 > ⚠️ 注意事项: > 1. 键名需保持唯一性(如使用前缀`appname_key`) > 2. 敏感数据(如密码)应使用`flutter_secure_storage` > 3. 频繁读写可能影响性能,建议批量操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值