封装

import 'dart:convert';

import 'package:shared_preferences/shared_preferences.dart';

class JSpUtil {
JSpUtil._internal(); // 私有的构造方法,防止外部实例化 factory JSpUtil() => _instance; // 工厂方法,返回 JSpUtil 唯一实例 static late final JSpUtil _instance = JSpUtil._internal(); // JSpUtil 唯一实例 static late SharedPreferences _preferences; // SharedPreferences 对象 static Future<JSpUtil> getInstance() async {
_preferences = await SharedPreferences.getInstance(); // 获取 SharedPreferences 实例
return _instance;
} /// 根据key存储int类型
static Future<bool> setInt(String key, int value) {
return _preferences.setInt(key, value); // 使用 SharedPreferences 存储 int 类型的数据
} /// 根据key获取int类型
static int? getInt(String key, {int defaultValue = 0}) {
return _preferences.getInt(key) ?? defaultValue; // 使用 SharedPreferences 获取 int 类型数据,如果不存在则返回默认值
} /// 根据key存储double类型
static Future<bool> setDouble(String key, double value) {
return _preferences.setDouble(key, value); // 使用 SharedPreferences 存储 double 类型的数据
} /// 根据key获取double类型
static double? getDouble(String key, {double defaultValue = 0.0}) {
return _preferences.getDouble(key) ?? defaultValue; // 使用 SharedPreferences 获取 double 类型数据,如果不存在则返回默认值
} /// 根据key存储字符串类型
static Future<bool> setString(String key, String value) {
return _preferences.setString(key, value); // 使用 SharedPreferences 存储字符串类型的数据
} /// 根据key获取字符串类型
static String? getString(String key, {String defaultValue = ""}) {
return _preferences.getString(key) ?? defaultValue; // 使用 SharedPreferences 获取字符串类型数据,如果不存在则返回默认值
} /// 根据key存储布尔类型
static Future<bool> setBool(String key, bool value) {
return _preferences.setBool(key, value); // 使用 SharedPreferences 存储布尔类型的数据
} /// 根据key获取布尔类型
static bool? getBool(String key, {bool defaultValue = false}) {
return _preferences.getBool(key) ?? defaultValue; // 使用 SharedPreferences 获取布尔类型数据,如果不存在则返回默认值
} /// 根据key存储字符串类型数组
static Future<bool> setStringList(String key, List<String> value) {
return _preferences.setStringList(key, value); // 使用 SharedPreferences 存储字符串类型数组
} /// 根据key获取字符串类型数组
static List<String> getStringList(String key,
{List<String> defaultValue = const []}) {
return _preferences.getStringList(key) ?? defaultValue; // 使用 SharedPreferences 获取字符串类型数组,如果不存在则返回默认值
} /// 根据key存储Map类型
static Future<bool> setMap(String key, Map value) {
return _preferences.setString(key, json.encode(value)); // 使用 SharedPreferences 存储 Map 类型的数据,将 Map 转为 json 字符串存储
} /// 根据key获取Map类型
static Map getMap(String key) {
String jsonStr = _preferences.getString(key) ?? ""; // 使用 SharedPreferences 获取存储的 json 字符串
return jsonStr.isEmpty ? Map : json.decode(jsonStr); // 将 json 字符串解码为 Map 对象,如果 json 为空则返回空 Map 对象
}
}

shared_preferences缓存的更多相关文章

  1. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  2. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  3. ASP.NET Core 中间件之压缩、缓存

    前言 今天给大家介绍一下在 ASP.NET Core 日常开发中用的比较多的两个中间件,它们都是出自于微软的 ASP.NET 团队,他们分别是 Microsoft.AspNetCore.Respons ...

  4. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  5. [Java 缓存] Java Cache之 DCache的简单应用.

    前言 上次总结了下本地缓存Guava Cache的简单应用, 这次来继续说下项目中使用的DCache的简单使用. 这里分为几部分进行总结, 1)DCache介绍; 2)DCache配置及使用; 3)使 ...

  6. [原创]mybatis中整合ehcache缓存框架的使用

    mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...

  7. 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  8. 深究标准IO的缓存

    前言 在最近看了APUE的标准IO部分之后感觉对标准IO的缓存太模糊,没有搞明白,APUE中关于缓存的部分一笔带过,没有深究缓存的实现原理,这样一本被吹上天的书为什么不讲透彻呢?今天早上爬起来赶紧找了 ...

  9. 缓存工厂之Redis缓存

    这几天没有按照计划分享技术博文,主要是去医院了,这里一想到在医院经历的种种,我真的有话要说:医院里的医务人员曾经被吹捧为美丽+和蔼+可亲的天使,在经受5天左右相互接触后不得不让感慨:遇见的有些人员在挂 ...

  10. .net 分布式架构之分布式缓存中间件

    开源git地址: http://git.oschina.net/chejiangyi/XXF.BaseService.DistributedCache 分布式缓存中间件  方便实现缓存的分布式,集群, ...

随机推荐

  1. Redis系列之——Redis介绍安装配置

    文章目录 第一章 redis初识 1.1 Redis是什么 1.2 Redis特性(8个) 1.3 Redis单机安装 1.3.1下载安装 1.3.2三种启动方式 1.3.2.1 最简启动 1.3.2 ...

  2. 如何使用Arduino创建摩尔斯电码生成器

    摩尔斯电码工作原理 摩尔斯电码发明于19世纪,使用非常简单的长短脉冲序列(通常为电和划)来远距离发送消息.通过将字母表中的字母编码为电和划的组合,信息可以只用一个单一的电子或声音信号来表达. 为了说明 ...

  3. JavaCore extends Plugin

    /******************************************************************************* 2 * Copyright (c) 2 ...

  4. 浅谈关于LCA

    prologue 本身只会 tarjan 和 倍增法求LCA 的,但在发现有一种神奇的\(O(1)\) 查询 lca 的方法,时间优化很明显. main body 倍增法 先讨论倍增法,倍增法求 lc ...

  5. 轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools

    引言 在前两章节中,我们详细讲解了如何手动配置启动MongoDB.然而,现在有许多不同的工具可以帮助我们更方便地启动和创建MongoDB数据库.因此,今天我将介绍一个名为mtools的开源项目,它可以 ...

  6. 【Unity3D】UI Toolkit数据动态绑定

    1 前言 ​ 本文将实现 cvs 表格数据与 UI Toolkit 元素的动态绑定. ​ 如果读者对 UI Toolkit 不是太了解,可以参考以下内容. UI Toolkit简介 UI Toolki ...

  7. PKUSC & GDCPC 2023 游记

    离得太近,游记打算扔一起. 有没有神仙面基啊 /kel. PKUSC 2023 Day -? 突然听说不给 NOI Linux,震惊. 前情提要:在从 CSP 开始就全员强制 linux 的 LN 为 ...

  8. ELK中 Elasticsearch和Logstash内存大小设置的考虑

    本文为博主原创,转载请注明出处: 在ELK(Elasticsearch.Logstash和Kibana)日志采集和分析场景中,适当设置Logstash和Elasticsearch的内存大小非常重要.这 ...

  9. mybatis 操作 mysql 大批量插入,数据分页处理

    /** * 大批量插入,数据分页处理 * * @param tableName 临时表名称 * @param mapHead 临时表属性 Map,key = 临时表字段属性, value = 具体值. ...

  10. 图片调整大小,图片改变像素,用win10自带的工具就够了

    A:大哥大哥,你会PS吗? 内心:好家伙,什么大项目,都用上ps了,还好大学的时候学过一点点. 我:嗯嗯,会一点,怎么了 A:你看,帮我调整一下图片呗 内心:哈哈,又能看到某人的照片了.... 我:害 ...