第九十八回 如何实现本地存储

文章目录

  • 概念介绍
  • 实现方法
  • 示例代码

我们在上一章回中介绍了"如何自定义评分条"相关的内容,本章回中将介绍 如何实现本地存储,闲话休提,让我们一起Talk Flutter吧。

概念介绍

Flutter是一套跨平台的UI框架,它不像原生SDK一样提供本地存储功能,因此,我们在本章回将介绍如何实现本地存储功能。

我们主要通过shared_preferences包来实现本地存储功能,这里介绍的本地存储也只限于存储一些小数据,比如配置信息,而不能存储大文件。

实现方法

  1. 在yaml文件中导入shared_preferences包;
  2. 获取shared_preferences实例对象,获取时需要使用异步操作;
  3. 使用shared_preferences实例中的setXXX方法存储数据;
  4. 使用shared_preferences实例中的getXXX方法获取数据;
  5. 使用shared_preferences实例中的removeXXX方法删除数据;

上面方法中提到的XXX表示dart语言中的基本类型,比如int,String等。setXXX方法表示setInt,setString等方法。因此shared_preferences实例只能存储基本类型的数据。

如果大家有Android编译经验就会发现它和Android中的SharedPreferences十分相似。下面是示例代码,请大家参考。

示例代码

///把sharedPreference封装成一个类,相关操作封装成方法
class StorageCache {final String key_age = 'age';final String key_name = 'name';SharedPreferences? sharedPreferences;///获取SharedPreferences实例需要使用异步操作void init() async {sharedPreferences = await SharedPreferences.getInstance().whenComplete(() => print('get sharedPreference success') );}StorageCache() {init();}///写数据操作需要封装成异步方法void sharedPrefWriteData () async{int age = 3;String name = "Talk8";await sharedPreferences?.setInt(key_age, age).whenComplete(() => print('write success'));await sharedPreferences?.setString(key_name, name).whenComplete(() => print('write success'));}void sharedPrefReadData() {int? age = sharedPreferences?.getInt(key_age);String? name = sharedPreferences?.getString(key_name);debugPrint("age: $age, name: $name");}///删除数据操作需要封装成异步方法void sharedPrefRemoveKey() async {await sharedPreferences?.remove(key_age).whenComplete(() => print('remove success'));await sharedPreferences?.remove(key_name).whenComplete(() => print('remove success'));}
}

在上面的代码中,我们把shared_preference包封装成一个类,该包提供的相关操作封装成类的方法,这种封装有助于在其它代码中使用相关方法实现本地存储功能。

看官们,关于"如何实现本地存储"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/16368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解构建LLM驱动的聊天机器人时的向量数据库检索的局限性 - (第1/3部分)

本博客是一系列文章中的第一篇,解释了为什么使用大型语言模型(LLM)部署专用领域聊天机器人的主流管道成本太高且效率低下。在第一篇文章中,我们将讨论为什么矢量数据库尽管最近流行起来,但在实际生产管道中部署时从根本…

网络安全 Day23-mariadb数据库数据管理和备份

mariadb数据库数据管理和备份 1. 管理数据库中的库2. 管理库中的表3. 管理表中的字段(列)4. 管理表中的数据(行)5. 数据库数据备份与恢复 1. 管理数据库中的库 进入指定数据库: use 数据库名字库的增删改查 创建数据库: create database 数据库名字指定字符及创建数据库: CREA…

使用Spring Boot AOP实现日志记录

目录 介绍 1.1 什么是AOP 1.2 AOP体系与概念 AOP简单实现 2.1 新建一个SpringBoot项目,无需选择依赖 2.2 设置好本地Maven配置后,在pom.xml文件里添加添加maven依赖 2.3 创建一个业务类接口 2.4 在实体类实现接口业务 2.5 在单元测试运行结果 …

压缩包工具类

压缩包工具类(下载) import com.enlistboot.common.core.FileResult; import org.springframework.http.HttpHeaders; import org.springframework.util.ObjectUtils;import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net…

IDEA Writing classes... 比较慢

IDEA配置修改如下: 1、File -> Settings… 2、Build,Execution,Deployment -> Compiler Build process heap size 配置为 20483、Build,Execution,Deployment -> Compiler -> ActionScript & Flex C…

vue基础-diff算法

vue基础-diff算法 1、根元素改变2、根元素不变 1、根元素改变 同级比较-根元素的变化-整个dom树删除重建 2、根元素不变 同级比较,根元素不变-属性改变更新属性

SpringBoot自动装配介绍

SpringBoot是对Spring的一种扩展,其中比较重要的扩展功能就是自动装配:通过注解对常用的配置做默认配置,简化xml配置内容。本文会对Spring的自动配置的原理和部分源码进行解析,本文主要参考了Spring的官方文档。 自动装配的组件 …

[每日习题]进制转换 参数解析——牛客习题

hello,大家好,这里是bang___bang_,本篇记录2道牛客习题,进制转换(简单),参数解析(中等),如有需要,希望能有所帮助! 目录 1️⃣进制转换 2️⃣参…

python 自动化数据提取之正则表达式

>>>> 前 言 我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据,今天在这边和大家聊聊如何在python中使用正则表达式。 正则表达式,又称正规表示式、正规表示法、正规…

gitee使用参考

Git代码托管服务 2.1 常用的Git代码托管服务 gitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub码云(地址:…

《cuda c编程权威指南》03 - cuda小功能汇总

1. 计时 1.1 linux #include <sys/time.h>double cpuSecond() {struct timeval tp;gettimeofday(&tp, NULL);return ((double)tp.tv_sec (double)tp.tv_usec*1e-6); }// 调用 double start cpuSecond(); kernel_name << <grid, block >> > (ar…

Java反射机制的详细讲解

目录 1.反射机制是什么&#xff1f; 2.反射机制能干什么&#xff1f; 3.反射相关的类 ​编辑 4.Class类(反射机制的起源 ) 5.反射机制相关的API 1.(重要)常用获得类相关的方法 2.常用获得类中属性相关的方法(以下方法返回值为Field相关 3.(了解)获得类中注解相关的方法…

统计神经网络参数量、MAC、FLOPs等信息

0、基础提示 1、FLOPS是用来衡量硬件算力的指标&#xff0c;FLOPs用来衡量模型复杂度。 2、MAC 一般为 FLOPs的2倍 3、并非FLOPs越小在硬件上就一定运行更快&#xff0c;还与模型占用的内存&#xff0c;带宽&#xff0c;等有关 1、FLOPs计算 神经网络参数量。用于衡量模型大…

【Django+Vue】英文成绩管理平台--20230727

能够满足大部分核心需求&#xff08;标绿&#xff09;&#xff1a;报表部分应该比较难。 项目地址 前端编译 https://gitlab.com/m7840/toeic_vue_dist Vue源码 https://gitlab.com/m7840/toeic_vue Django源码 https://gitlab.com/m7840/toeic_python 项目架构 流程 …

C# 循环等知识点

《1》程序&#xff1a;事先写好的指令&#xff08;代码&#xff09; using 准备工具 namespace 模块名称 { class 子模块{ static void main()//具体事项 { 代码 } } } 《2》变量&#xff1a;内存里的一块空间&#xff0c;用来存储数据常用的有小数&#xff0c;整数&#xff0c…

LeetCode使用最小花费爬楼梯(动态规划)

使用最小花费爬楼梯&#xff08;动态规划&#xff09; 题目描述算法流程(方法一)编程代码优化代码算法流程&#xff08;方法二&#xff09;编程代码代码优化 链接: 使用最小花费爬楼梯 题目描述 算法流程(方法一) 编程代码 class Solution { public:int minCostClimbingStair…

支持多种通信方式和协议方便接入第三方服务器或云平台

2路RS485串口是一种常用的通信接口&#xff0c;可以支持Modbus Slave协议&#xff0c;并可接入SCADA、HMI、DSC、PLC等上位机。它还支持Modbus RTU Master协议&#xff0c;可用于扩展多达48个Modbus Slave设备&#xff0c;如Modbus RTU远程数据采集模块、电表、水表、柴油发电机…

Linux 随usb设备插拔 自动挂载和卸载

vi /etc/mdev.conf 文件中添加一行 sd[a,b][1-9] 0:0 777 * if [ $ACTION "add" ]; then mount /dev/$MDEV /mnt; else umount /mnt; fi 参考&#xff1a; 《Linux驱动&#xff1a;设备节点文件的创建过程》 - 知乎 https://www.cnblogs.com/lifexy/p/7891883.ht…

Android开发EditText禁止输入监听及InputFilter字符过滤

目录 ??监听事件??InputFilter ??监听事件 setOnEditorActionListener&#xff1a;软键盘回车监听事件 ? 1 2 3 4 5 6 7 testEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { Override public boolean onEditorAction(TextVi…

Qt 中操作xml文件和JSON字符串

文章目录 1、概述1.1、xml介绍1.2、json介绍 2、xml文件增删改查2.1、写xml文件内容2.2、读xml文件内容2.3、删除xml文件内容2.4、修改xml文件内容 3、构建JSON字符串3.1、JSON字符串排版4、剪切板操作 1、概述 1.1、xml介绍 XML 指可扩展标记语言&#xff08;EXtensible Mark…