Flutter shared_preferences使用
文章目录
- 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使用相关推荐
- Flutter type ‘Future<bool>‘ is not a subtype of type ‘bool‘ in type cast
这个问题是我在使用flutter shared_preferences的时候,自己默认写了几个存储和读取的字段函数,然后出错了 问题在! 我使用的时候非常耿直 如图 getUserNameInput函 ...
- Flutter的原理及美团的实践
总第272篇 2018年 第64篇 导读 Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2 ...
- 深入解析美团外卖Flutter-架构演进之路(上篇),2021Android研发必问高级面试题
全局变量和静态成员变量,这些变量 不会在热刷新时更新. 修改了main函数中创建的根控件节点,Flutter在热刷新后只会根据原来的根节点重新创建控件树,不会修改根节点. 某个类从普通类型转换成枚举类 ...
- 【Flutter】shared_preferences 本地存储 ( 简介 | 安装 shared_preferences 插件 | 使用 shared_preferences 流程 )
文章目录 一.shared_preferences 本地存储插件简介 二.安装 shared_preferences 插件 三.使用 shared_preferences 流程 四.完整代码示例 五. ...
- Flutter:删除所有已保存的shared_preferences首选项
dart - Flutter:删除所有已保存的shared_preferences首选项 想在用户点击注销时删除所有保存的shared_preferences首选项.有什么方法可以一次性完成而不删除一 ...
- flutter中本地存储shared_preferences的使用
首先在 pubspec.yaml 文件中添加 shared_preferences 引用并 Packages get dependencies:flutter:sdk: flutter# The fo ...
- Flutter 数据存储--shared_preferences使用详情
1.shared_preferences介绍 shared_preferences主要的作用是用于将数据异步持久化到磁盘,因为持久化数据只是存储到临时目录,当app删除时该存储的数据就是消失,web开 ...
- flutter 本地存储数据(shared_preferences)
一.shared_preferences 本地存储插件简介 shared_preferences 是 Flutter 提供的 本地数据存取 插件 ; 在不同的平台 , 基于不同的机制开发 , 如 An ...
- 革命性移动端开发框架-Flutter时间简史
说到Flutter,可能很多同学都会将它和这几个词关联起来:新兴的.移动端.动态化.跨平台.开发框架. 从去年开始Flutter的热度在不断地上升,那么它对很多同学造成了一个误区:认为Flutter是 ...
最新文章
- 封装了一下我佛山人4.0 (支持vs2005)asp.net 页面验证
- 静态链表实现(A-B)+(B-A)【代码】
- linux下如何判断oracle数据库tns是否设置正常
- iPhone因安全漏洞上热搜,苹果:暂时无法修复,法国总统也中招
- python中判断实例可迭代地几种方式
- GDCM:读取和打印DICOM的属性的测试程序
- dict keys 取最后一个_一步一步学Python3(小学生也适用) 第十三篇: 字典Dict类型
- oracle11g服务端配置实例,Win7系统Oracle11g服务端和客户端连接数据库配置
- Java关于数据结构的实现:散列
- Linux tty远程退出,screen 如果程序没结束就退出远程管理终端
- oracle12c如何完全卸载_如何卸载oracle12c
- java web后台开发跟手机APP后台开发有什么不同? 二者怎么通信?
- 热敏电阻制作温度传感器的c语言,课题一NTC热敏电阻温度测量和控制系统.doc
- Grain Timers and Reminders
- Python自学笔记系列一——认识python
- rar压缩包找回压缩密码
- 袋鼠云数据中台专栏2.0 | 数据中台之数据源
- FFmpeg[15] - 从官网下载FFmpeg时的坑,你有遇到吗?
- onlyoffice5.4.2离线包的制作—解决中文字体问题
- 阿里巴巴直播防控中的实人认证技术 1
热门文章
- 浅析CSS中的overflow属性
- c#缩小至任务栏窗体弹出_C#实现任务栏通知窗口
- 洛谷 P2196 [NOIP1996 提高组] 挖地雷(dp简单题)
- rhel8使用Xming配置图形转发
- 杰理之触摸片大小合理性2【篇】
- visio for android,Visio将在不久的将来会在Android和Windows 10手机上使用 | MOS86
- 计算机浮点表示法 教案,计算机组成原理——浮点数表示方法(示例代码)
- Android进阶课学习收获(31~33)
- python装饰器什么时候用_什么时候会用到python装饰器
- P3674 小清新人渣的本愿 (莫队 + bitset)