文章目录

  • Flutter shared_preferences使用
    • 简述
    • 添加依赖
    • 基本使用
      • 支持数据类型
      • 支持平台
      • 写数据
      • 读数据
      • 删除数据
      • 获取所有key
      • key是否存在
    • 封装

Flutter shared_preferences使用

简述

为简单数据封装平台特定的持久存储(iOS和macOS上的NSUserDefaults, Android上的SharedPreferences,等等)。数据可能会异步持久化到磁盘,并且不能保证写入返回后会持久化到磁盘,所以这个插件不能用于存储关键数据。

添加依赖

shared_preferences: ^2.0.15

基本使用

支持数据类型

int, double, bool, String and List<String>

支持平台

iOS: NSUserDefaults
Android: SharedPreferences
Web: localStorage
Linux: FileSystem(保存数据到本地系统文件库中)
Mac OS: FileSystem(保存数据到本地系统文件库中)
Windows: FileSystem(保存数据到本地系统文件库中)

写数据

var sp = await SharedPreferences.getInstance();
sp.setString("name", "小明");
sp.setInt("age", 18);
sp.setBool("sex", true);
sp.setDouble("height", 180.1);
sp.setStringList("address", <String>["北京市", "海淀区"]);

读数据

var sp = await SharedPreferences.getInstance();
String? name = sp.getString("name");
int? age = sp.getInt("age");
bool? sex = sp.getBool("sex");
double? height = sp.getDouble("height");
List<String>? address = sp.getStringList("address");

删除数据

删除一个数据

var sp = await SharedPreferences.getInstance();
sp.remove("name");

清除所有数据

var sp = await SharedPreferences.getInstance();
sp.clear();

获取所有key

var sp = await SharedPreferences.getInstance();
var keys = sp.getKeys();

key是否存在

var sp = await SharedPreferences.getInstance();
var b = sp.containsKey("name");

封装

封装代码

import 'dart:convert';import 'package:shared_preferences/shared_preferences.dart';class SpUtils {SpUtils._internal();factory SpUtils() => _instance;static late final SpUtils _instance = SpUtils._internal();static late SharedPreferences _preferences;static Future<SpUtils> getInstance() async {_preferences = await SharedPreferences.getInstance();return _instance;}/// 根据key存储int类型static Future<bool> setInt(String key, int value) {return _preferences.setInt(key, value);}/// 根据key获取int类型static int? getInt(String key, {int defaultValue = 0}) {return _preferences.getInt(key) ?? defaultValue;}/// 根据key存储double类型static Future<bool> setDouble(String key, double value) {return _preferences.setDouble(key, value);}/// 根据key获取double类型static double? getDouble(String key, {double defaultValue = 0.0}) {return _preferences.getDouble(key) ?? defaultValue;}/// 根据key存储字符串类型static Future<bool> setString(String key, String value) {return _preferences.setString(key, value);}/// 根据key获取字符串类型static String? getString(String key, {String defaultValue = ""}) {return _preferences.getString(key) ?? defaultValue;}/// 根据key存储布尔类型static Future<bool> setBool(String key, bool value) {return _preferences.setBool(key, value);}/// 根据key获取布尔类型static bool? getBool(String key, {bool defaultValue = false}) {return _preferences.getBool(key) ?? defaultValue;}/// 根据key存储字符串类型数组static Future<bool> setStringList(String key, List<String> value) {return _preferences.setStringList(key, value);}/// 根据key获取字符串类型数组static List<String> getStringList(String key, {List<String> defaultValue = const []}) {return _preferences.getStringList(key) ?? defaultValue;}/// 根据key存储Map类型static Future<bool> setMap(String key, Map value) {return _preferences.setString(key, json.encode(value));}/// 根据key获取Map类型static Map getMap(String key) {String jsonStr = _preferences.getString(key) ?? "";return jsonStr.isEmpty ? Map : json.decode(jsonStr);}/// 通用设置持久化数据static set<T>(String key, T value) {String type = value.runtimeType.toString();switch (type) {case "String":setString(key, value as String);break;case "int":setInt(key, value as int);break;case "bool":setBool(key, value as bool);break;case "double":setDouble(key, value as double);break;case "List<String>":setStringList(key, value as List<String>);break;case "_InternalLinkedHashMap<String, String>":setMap(key, value as Map);break;}}/// 获取持久化数据static dynamic get<T>(String key) {dynamic value = _preferences.get(key);if (value.runtimeType.toString() == "String") {if (_isJson(value)) {return json.decode(value);}}return value;}/// 获取持久化数据中所有存入的keystatic Set<String> getKeys() {return _preferences.getKeys();}/// 获取持久化数据中是否包含某个keystatic bool containsKey(String key) {return _preferences.containsKey(key);}/// 删除持久化数据中某个keystatic Future<bool> remove(String key) async {return await _preferences.remove(key);}/// 清除所有持久化数据static Future<bool> clear() async {return await _preferences.clear();}/// 重新加载所有数据,仅重载运行时static Future<void> reload() async {return await _preferences.reload();}/// 判断是否是json字符串static _isJson(String value) {try {JsonDecoder().convert(value);return true;} catch (e) {return false;}}
}

初始化

void main() async {WidgetsFlutterBinding.ensureInitialized();await SpUtils.getInstance();
}

使用方式一

写数据:

SpUtils.setString("name", "小明2");
SpUtils.setInt("age", 28);
SpUtils.setBool("sex", true);
SpUtils.setDouble("height", 180.2);
SpUtils.setStringList("address", <String>["北京市2", "海淀区2"]);

读数据:

String? name = SpUtils.getString("name");
int? age = SpUtils.getInt("age");
bool? sex = SpUtils.getBool("sex");
double? height = SpUtils.getDouble("height");
List<String>? address = SpUtils.getStringList("address");

使用方式二

写数据:

SpUtils.set("name", "小明3");
SpUtils.set("age", 38);
SpUtils.set("sex", true);
SpUtils.set("height", 180.3);
SpUtils.set("address", <String>["北京市3", "海淀区3"]);

读数据:

String? name = SpUtils.get<String>("name");
int? age = SpUtils.get<int>("age");
bool? sex = SpUtils.get<bool>("sex");
double? height = SpUtils.get<double>("height");
List<String>? address = SpUtils.get<List<String>>("address");

Flutter shared_preferences使用相关推荐

  1. Flutter type ‘Future<bool>‘ is not a subtype of type ‘bool‘ in type cast

    这个问题是我在使用flutter shared_preferences的时候,自己默认写了几个存储和读取的字段函数,然后出错了 问题在! 我使用的时候非常耿直 如图 getUserNameInput函 ...

  2. Flutter的原理及美团的实践

    总第272篇 2018年 第64篇 导读 Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2 ...

  3. 深入解析美团外卖Flutter-架构演进之路(上篇),2021Android研发必问高级面试题

    全局变量和静态成员变量,这些变量 不会在热刷新时更新. 修改了main函数中创建的根控件节点,Flutter在热刷新后只会根据原来的根节点重新创建控件树,不会修改根节点. 某个类从普通类型转换成枚举类 ...

  4. 【Flutter】shared_preferences 本地存储 ( 简介 | 安装 shared_preferences 插件 | 使用 shared_preferences 流程 )

    文章目录 一.shared_preferences 本地存储插件简介 二.安装 shared_preferences 插件 三.使用 shared_preferences 流程 四.完整代码示例 五. ...

  5. Flutter:删除所有已保存的shared_preferences首选项

    dart - Flutter:删除所有已保存的shared_preferences首选项 想在用户点击注销时删除所有保存的shared_preferences首选项.有什么方法可以一次性完成而不删除一 ...

  6. flutter中本地存储shared_preferences的使用

    首先在 pubspec.yaml 文件中添加 shared_preferences 引用并 Packages get dependencies:flutter:sdk: flutter# The fo ...

  7. Flutter 数据存储--shared_preferences使用详情

    1.shared_preferences介绍 shared_preferences主要的作用是用于将数据异步持久化到磁盘,因为持久化数据只是存储到临时目录,当app删除时该存储的数据就是消失,web开 ...

  8. flutter 本地存储数据(shared_preferences)

    一.shared_preferences 本地存储插件简介 shared_preferences 是 Flutter 提供的 本地数据存取 插件 ; 在不同的平台 , 基于不同的机制开发 , 如 An ...

  9. 革命性移动端开发框架-Flutter时间简史

    说到Flutter,可能很多同学都会将它和这几个词关联起来:新兴的.移动端.动态化.跨平台.开发框架. 从去年开始Flutter的热度在不断地上升,那么它对很多同学造成了一个误区:认为Flutter是 ...

最新文章

  1. 封装了一下我佛山人4.0 (支持vs2005)asp.net 页面验证
  2. 静态链表实现(A-B)+(B-A)【代码】
  3. linux下如何判断oracle数据库tns是否设置正常
  4. iPhone因安全漏洞上热搜,苹果:暂时无法修复,法国总统也中招
  5. python中判断实例可迭代地几种方式
  6. GDCM:读取和打印DICOM的属性的测试程序
  7. dict keys 取最后一个_一步一步学Python3(小学生也适用) 第十三篇: 字典Dict类型
  8. oracle11g服务端配置实例,Win7系统Oracle11g服务端和客户端连接数据库配置
  9. Java关于数据结构的实现:散列
  10. Linux tty远程退出,screen 如果程序没结束就退出远程管理终端
  11. oracle12c如何完全卸载_如何卸载oracle12c
  12. java web后台开发跟手机APP后台开发有什么不同? 二者怎么通信?
  13. 热敏电阻制作温度传感器的c语言,课题一NTC热敏电阻温度测量和控制系统.doc
  14. Grain Timers and Reminders
  15. Python自学笔记系列一——认识python
  16. rar压缩包找回压缩密码
  17. 袋鼠云数据中台专栏2.0 | 数据中台之数据源
  18. FFmpeg[15] - 从官网下载FFmpeg时的坑,你有遇到吗?
  19. onlyoffice5.4.2离线包的制作—解决中文字体问题
  20. 阿里巴巴直播防控中的实人认证技术 1

热门文章

  1. 浅析CSS中的overflow属性
  2. c#缩小至任务栏窗体弹出_C#实现任务栏通知窗口
  3. 洛谷 P2196 [NOIP1996 提高组] 挖地雷(dp简单题)
  4. rhel8使用Xming配置图形转发
  5. 杰理之触摸片大小合理性2【篇】
  6. visio for android,Visio将在不久的将来会在Android和Windows 10手机上使用 | MOS86
  7. 计算机浮点表示法 教案,计算机组成原理——浮点数表示方法(示例代码)
  8. Android进阶课学习收获(31~33)
  9. python装饰器什么时候用_什么时候会用到python装饰器
  10. P3674 小清新人渣的本愿 (莫队 + bitset)