[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

相关文章

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows