[Flutter]shared_preferences基本用法以及可视化管理存储的key和value类型

本文主要是介绍[Flutter]shared_preferences基本用法以及可视化管理存储的key和value类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

shared_preferences 是一个Flutter插件,它提供了一种简单的方式来在应用程序中存储和获取持久化的键值对数据。它可以用于存储应用程序的配置信息、用户偏好设置、登录状态等。

使用 shared_preferences 插件,你可以在应用程序中轻松地保存和读取数据,而无需处理底层的持久化细节。它基于平台的本地存储机制,例如Android中的SharedPreferences和iOS中的NSUserDefaults。

shared_preferences基本用法

以下是使用 shared_preferences 插件的基本操作:

1.添加依赖

在你的Flutter项目的 pubspec.yaml 文件中添加 shared_preferences 依赖。

dependencies:shared_preferences: ^2.2.2

2.导入插件

在需要使用 shared_preferences 的文件中导入插件。

import 'package:shared_preferences/shared_preferences.dart';

3.存储数据

使用 SharedPreferences.getInstance() 方法获取 SharedPreferences 实例,并使用 setXxx() 方法存储数据。

SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('username', 'John');
prefs.setInt('age', 25);

4.读取数据

使用 SharedPreferences.getInstance() 方法获取 SharedPreferences 实例,并使用 getXxx() 方法读取数据。

SharedPreferences prefs = await SharedPreferences.getInstance();
String username = prefs.getString('username');
int age = prefs.getInt('age');

5.删除数据

使用 SharedPreferences.getInstance() 方法获取 SharedPreferences 实例,并使用 remove() 方法删除指定键的数据。

SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove('username');

通过使用 shared_preferences 插件,你可以方便地在Flutter应用程序中存储和获取持久化的数据。请注意,这些数据是应用程序私有的,只能在当前设备上访问。

可视化管理shared_preferences中的key和value类型

看了上面shared_preferences的基本用法,我们会发现,直接使用时会导致定义的key特别分散。开发者无法一目了然的查看,现在shared_preferences中定义了哪些key,对应的value又是什么类型。

1.使用

await SharedPreferencesManager.instance.set(SharedPreferencesKey.didGuide, true);bool? res = await SharedPreferencesManager.instance.get(SharedPreferencesKey.didGuide);

2.封装SharedPreferencesManager

import 'package:shared_preferences/shared_preferences.dart';
import 'package:app_teleprompter/support/extension/object_extension.dart';/// 管理SharedPreferences的键和值。
class SharedPreferencesManager {// 单例对象static final SharedPreferencesManager _instance = SharedPreferencesManager._internal();// SharedPreferences的实例late final Future<SharedPreferences> _prefsFuture;// 私有构造函数,用于创建类的单例实例SharedPreferencesManager._internal() {_prefsFuture = _init();}// 异步初始化,确保在使用SharedPreferences之前已完成初始化Future<SharedPreferences> _init() async {return SharedPreferences.getInstance();}// 提供一个getter来获取单例对象static SharedPreferencesManager get instance => _instance;// 使用泛型方法来获取键对应的值。// 根据泛型参数T的类型,决定使用哪个SharedPreferences的getter方法。Future<T?> get<T>(SharedPreferencesKey key) async {final SharedPreferences prefs = await _prefsFuture; // 等待初始化完成String keyString = key.toString();// 尝试获取值,如果不存在则返回nullObject? value;if (T == String) {value = prefs.getString(keyString) as T?;} else if (T == bool) {value = prefs.getBool(keyString) as T?;} else if (T == int) {value = prefs.getInt(keyString) as T?;} else if (T == double) {value = prefs.getDouble(keyString) as T?;} else if (T == List) {// 特别注意:我们假设List类型指的是List<String>value = prefs.getStringList(keyString) as T?;} else {// 如果类型不支持,则抛出异常//throw Exception('Unsupported type');}// 如果找不到值,则返回null,否则返回值return value as T?;}// 使用泛型方法设置值Future<bool> set<T>(SharedPreferencesKey key, T value) async {final SharedPreferences prefs = await _prefsFuture; // 等待初始化完成String keyString = key.toString();if (value is String) {return prefs.setString(keyString, value);} else if (value is bool) {return prefs.setBool(keyString, value);} else if (value is int) {return prefs.setInt(keyString, value);} else if (value is double) {return prefs.setDouble(keyString, value);} else if (value is List<String>) {return prefs.setStringList(keyString, value);} else {//throw Exception('Unsupported type');return false;}}
}// MARK: 自定义方法
extension PrintHelperExtension on SharedPreferencesManager {}/// 定义一个枚举,包含所有keys和它们对应的类型
enum SharedPreferencesKey {didGuide(bool), // 引导状态的键,与布尔类型关联isSubscribeValid(bool), // 订阅是否有效themeMode(String);// 存储枚举值关联的类型final Type type;// 枚举构造函数const SharedPreferencesKey(this.type);
}

这篇关于[Flutter]shared_preferences基本用法以及可视化管理存储的key和value类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/774363

相关文章

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与