Flutter学习12 - SharedPreferences

news2025/1/17 0:56:51

1、shared_preferences 插件

  • 类似于 Android 中的 SharedPreferences,键值对的形式进行本地存储

1.1、引入插件

在 pubspec.yaml 中引入

dependencies:
  shared_preferences: ^2.1.0

在需要用到的文件中引入

import 'package:shared_preferences/shared_preferences.dart';

1.2、基本用法

  • 写入数据
var sp = await SharedPreferences.getInstance();
sp.setString('name', 'Leon');
  • 读取数据
var sp = await SharedPreferences.getInstance();
var name = sp.getString('name');
  • 删除数据
var sp = await SharedPreferences.getInstance();
sp.remove('name');

2、代码示例

在这里插入图片描述

  • 工具类
import 'package:shared_preferences/shared_preferences.dart';

class SharedPreferencesUtils {
  static saveData<V>(String key, V value) async {
    var sp = await SharedPreferences.getInstance();
    var type = value.runtimeType;
    if (type == int) {
      sp.setInt(key, value as int);
    } else if (type == double) {
      sp.setDouble(key, value as double);
    } else if (type == String) {
      sp.setString(key, value as String);
    } else if (type == bool) {
      sp.setBool(key, value as bool);
    } else {
      print('类型不匹配');
    }
  }

  static getData(String key) async {
    var sp = await SharedPreferences.getInstance();
    print("sp.get:${sp.get(key)}");
    return sp.get(key);
  }

  static deleteAllData() async {
    var sp = await SharedPreferences.getInstance();
    for (String key in sp.getKeys()) {
      sp.remove(key);
    }
  }
}
  • 页面代码
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

const String KEY_NAME = "name";
const String KEY_AGE = "age";
const String KEY_WEIGHT = "weight";
const String KEY_BOOL = "bool";

class SpDemo extends StatefulWidget {
  const SpDemo({super.key});

  
  State<SpDemo> createState() => _SpDemoState();
}

class _SpDemoState extends State<SpDemo> {
  var _resultShow = "";

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('SpDemo'),
      ),
      body: Column(
        children: [
          ElevatedButton(onPressed: _saveData2Sp, child: const Text('保存数据')),
          ElevatedButton(onPressed: _getDataFromSp, child: const Text('获取数据')),
          ElevatedButton(onPressed: _deleteDataInSp, child: const Text('删除数据')),
          Text(_resultShow),
        ],
      ),
    );
  }

  void _saveData2Sp() async {
    await SharedPreferencesUtils.saveData(KEY_NAME, 'Leon');
    await SharedPreferencesUtils.saveData(KEY_AGE, 26);
    await SharedPreferencesUtils.saveData(KEY_WEIGHT, 60.5);
    await SharedPreferencesUtils.saveData(KEY_BOOL, true);
    setState(() {
      _resultShow = "保存成功";
    });
  }

  void _getDataFromSp() async {
    var name = await SharedPreferencesUtils.getData(KEY_NAME);
    var age = await SharedPreferencesUtils.getData(KEY_AGE);
    var weight = await SharedPreferencesUtils.getData(KEY_WEIGHT);
    var b = await SharedPreferencesUtils.getData(KEY_BOOL);
    print('姓名:$name\n年龄:$age\n体重:$weight\n其他:$b');
    setState(() {
      _resultShow = "姓名:$name\n年龄:$age\n体重:$weight\n其他:$b";
    });
  }

  void _deleteDataInSp() async {
    await SharedPreferencesUtils.deleteAllData();
    setState(() {
      _resultShow = "删除成功";
    });
  }
}
import 'package:flutter/material.dart';

import 'SharedPreferencesDemo.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Leon Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const SpDemo(),
    );
  }
}

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

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

相关文章

TAB标签美化 - SVG作为mask

今天觉得V3的标签不是很好看&#xff0c;忽然想起来之前看过Vue Admin Beautiful Pro的样式挺好的&#xff0c;顺手研究了一把。发现Vue Admin Beautiful是采用PNGmask css来解决的。于是乎打算把V3的标签页做点小美化&#xff0c;但是迁移过程发生些小插曲&#xff0c;在此记录…

蓝桥杯嵌入式(G431)备赛笔记——按键模块设计

cubeMX配置: 原理图 引脚配置为上拉模式 定时器 使用定时器3(通用定时器,使用外部晶振,内部时钟),分频系数为80(从0开始则为80-1),则每1s 1m次,定时评率为为10000,对应1s 1m/10000次,频率为10ms每次 一定记得开启NVIC使能中断 编写中断回调函数 void HAL_TIM_Per…

windows程序设计课程作业-1

目录 1、作业内容 2、主要思路 (1)写接口 (2)写类具体实现接口 (3)声明委托 (4)创建实例 (5)实例化委托 3、难点分析 1&#xff09;想明白接口的作用 2&#xff09;委托的作用 4、实现代码 5、运行结果 1、作业内容 使用 C# 编码&#xff08;涉及类、接口、委托等关…

Android Studio学习10——资源res的使用

一、String,StringArray的使用 一次修改&#xff0c;多出生效 String StringArray 二、color的使用 颜色代码对应表 和上面的相似用法 三、Dimen(尺寸)的使用 用的少&#xff0c;一般直接写尺寸 四、如何写一个drawable作为背景 五、如何写一个可以改变的drawable(按钮按下…

python爬虫———post请求方式(第十四天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

【Qt 学习笔记】如何在Qt中打印日志 | qDebug的使用 | Assistant的使用

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 如何在Qt中打印日志 | qDebug的使用 文章编号&#xff1a;Qt 学习笔记…

全文更新:什么是Power Path?充电时是充电器供电还是电池供电?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 昨天的文章误删了一部分&#xff0c;很多同学留言想看全文&#xff0c;现补充、更新如下&#xff1a; 前段时间&#xff0c;交流群里有位同学…

【群智能算法改进】一种改进的鹦鹉优化算法 鹦鹉优化器 IPO算法【Matlab代码#73】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始鹦鹉优化算法PO2. 改进后的IPO算法2.1 自适应切换因子2.2 混合柯西和高斯变异 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 原始鹦鹉优化算法PO 鹦鹉优化算法…

由王雅贤带你深入《DBWGLX vs Ethan_Wang》

vs是versus。 &#xff08;百度收录我DBWG&#x1f64f;&#x1f64f;&#x1f64f;&#xff09; 算来篇自传吧。像自我介绍和简历我是完全没写过喵~ 2024年4月6日12:44:53書 本命王雅贤&#xff0c;DBWGLX我的微信号&#xff0c;至于什么意思&#xff0c;吊臂王锅的意思&am…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…

sql语句如何在MySQL中执行?

我们先来对MySQL的基础结构进行分析 一、 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 的一个简要架构图&#xff0c;从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。 简单来说 MySQL 主要分为 Server 层和存储引擎层&#xff1a; Server…

性能分析--内存知识

内存相关知识 计算机中与CPU进行数据交换的桥梁。内存的速度&#xff0c;比CPU的速度要慢很多。比磁盘速度要快很多。内存中存放数据&#xff0c;一旦断电就会消失。linux系统的 /proc路径下的文件&#xff0c;都是内存文件。内存大小&#xff0c;一般 是GB为单位。 现在都操作…

【Pt】马灯贴图绘制过程 04-玻璃脏迹

目录 效果 步骤 一、透明玻璃 二、烟熏痕迹 三、粗糙 四、浮尘 效果 步骤 一、透明玻璃 1. 打开纹理集设置&#xff0c;着色器链接选择“新的着色器链接” 在着色器设置中可以看到此时名称为“Main shader &#xff08;Copy&#xff09;” 这里修改名称为“玻璃” 在…

【加密周报】比特币“强烈看涨”信号来了!巨鲸们正疯狂囤积稳定币!SEC呼吁公众对以太币ETF提供意见!

在过去一周里&#xff0c;比特币价格经历了一段下跌&#xff0c;并在随后出现了一些反弹迹象。与此同时&#xff0c;链上数据显示&#xff0c;巨鲸们在囤积稳定币&#xff0c;预示着“强烈的看涨情绪”。以太坊方面&#xff0c;美国证券交易委员会&#xff08;SEC&#xff09;已…

异常练习题

第一题&#xff1a;分析题 package chapter09_exception_teacher.src.com.atguigu05.exer.exer2;/*** 输出结果&#xff1a;* 进入方法A* 用A方法的finally* 制造异常* 进入方法B* 调用B方法的finally** author shkstart* create 0:57*/ public class ReturnExceptionDemo {sta…

【算法题】树节点的第 K 个祖先

题目&#xff1a; 给你一棵树&#xff0c;树上有 n 个节点&#xff0c;按从 0 到 n-1 编号。树以父节点数组的形式给出&#xff0c;其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。 树节点的第 k 个祖先节点是从该节点到根节点路径上的第 k 个节点。 实现…

算法 ST表

思想&#xff08;本质为dp&#xff09;&#xff1a; 题目AcWing1270. 数列区间最大值&#xff1a; 1270. 数列区间最大值 - AcWing题库 输入一串数字&#xff0c;给你 M 个询问&#xff0c;每次询问就给你两个数字 X,Y要求你说出 X到 Y这段区间内的最大数。 输入格式 第一…

Java数据结构队列

队列(Queue) 概念 队列的使用 注意&#xff1a;Queue是个接口&#xff0c;在实例化时必须实例化LinkedList的对象&#xff0c;因为LinkedList实现了Queue接口。 import java.util.LinkedList; import java.util.Queue;public class Test {public static void main(String[]…

初识二叉树和二叉树的基本操作

目录 一、树 1.什么是树 2. 与树相关的概念 二、二叉树 1.什么是二叉树 2.二叉树特点 3.满二叉树与完全二叉树 4.二叉树性质 相关题目&#xff1a; 5.二叉树的存储 6.二叉树的遍历和基本操作 二叉树的遍历 二叉树的基本操作 一、树 1.什么是树 子树是不相交的;…

windows server 2019-DHCP服务器搭建

一、DHCP的原理&#xff1a; 1&#xff0c;获得ip的过程 客户机发送请求给所有DHCP服务器 DHCP服务器收到请求后发送响应包给客户机 客户机收到响应包&#xff08;第一个到达的&#xff09;后&#xff0c;检验响应包里面的ip能不能用&#xff08;使用ping的方式&#xff0c…