热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter开发之——数据持久化存储shared_preferences

一概述shared_preferences,它保存数据的形式为Key-Value(键值对),支持Android和iOSsh

一 概述


  • shared_preferences,它保存数据的形式为 Key-Value(键值对),支持 Android 和 iOS
  • shared_preferences 是一个第三方插件,在 Android 中使用 SharedPreferences,在 iOS中使用 NSUserDefaults

二 添加依赖


2.1 依赖地址


  • pub 地址:https://pub.flutter-io.cn/packages/shared_preferences
  • Github 地址:https://github.com/flutter/plugins/tree/master/packages/shared_preferences/shared_preferences

2.2 添加依赖

在项目的 pubspec.yaml 文件中添加依赖

dependencies:shared_preferences: ^2.0.6

执行命令

flutter pub get

三 shared_preferences操作


3.1 支持数据类型

shared_preferences 支持的数据类型有 int、double、bool、string、stringList

3.2 shared_preferences实例化

同步操作

Future _prefs = SharedPreferences.getInstance();

异步操作(async)

var prefs = await SharedPreferences.getInstance();

3.3 数据的基本操作(int为例)


3.3.1 读取数据

Future _readData() async {var prefs = await SharedPreferences.getInstance();var result = prefs.getInt('Key_Int');return result ?? 0;
}

3.3.2 保存数据

_saveData() async {var prefs = await SharedPreferences.getInstance();prefs.setInt('Key_Int', 12);
}

3.3.3 删除数据

Future _deleteData() async {var prefs = await SharedPreferences.getInstance();prefs.remove('Key');
}

3.3.4 清除所有数据

Future _clearData() async {var prefs = await SharedPreferences.getInstance();prefs.clear();
}

3.4 Key 相关操作


3.4.1 获取所有的 Key

Future> _getKeys() async {var prefs = await SharedPreferences.getInstance();var keys = prefs.getKeys();return keys ?? [];
}

3.4.2 检测是否 Key 是否存在

Future _containsKey() async {var prefs = await SharedPreferences.getInstance();return prefs.containsKey('Key') ?? false;
}

四 示例


4.1 代码

Future _prefs = SharedPreferences.getInstance(); //sharepreference初始化
late Future _counter;//变量//依次+1Future _incrementCounter() async {final SharedPreferences prefs = await _prefs;final int counter = (prefs.getInt('counter') ?? 0) + 1;setState(() {_counter = prefs.setInt("counter", counter).then((bool success) {return counter;});});}@overridevoid initState() {super.initState();_counter = _prefs.then((SharedPreferences prefs) {return (prefs.getInt('counter') ?? 0);});}body: Center(child: FutureBuilder(future: _counter,builder: (BuildContext context, AsyncSnapshot snapshot) {switch (snapshot.connectionState) {case ConnectionState.waiting:return const CircularProgressIndicator();default:if (snapshot.hasError) {return Text('Error: ${snapshot.error}');} else {return Text('Button 点击了 ${snapshot.data}次',);}}})),floatingActionButton: FloatingActionButton(onPressed: _incrementCounter,tooltip: 'Increment',child: const Icon(Icons.add),),

4.2 效果图

4.3 查看shared_preferences文件


  • 打开Device File Explorer,选择设备,找到data/data/com.example.flutter_image(包名)/shared_prefs文件夹

  • 右键FlutterSharedPreferences.xml文件导出,打开查看文件信息





推荐阅读
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!来源|https:github.comwizardbyronprinci ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 基于Linux系统的Kickstart自动化服务器部署方案
    本文针对企业需求,提出了一种基于Linux系统的Kickstart自动化服务器部署方案。该方案旨在通过无盘批量安装操作系统,提高企业IT基础设施的部署效率。Kickstart是一种利用Anaconda工具实现服务器自动化安装的技术,能够显著简化和加速操作系统的安装过程。通过详细的实施规划,本文介绍了Kickstart的工作原理及其在实际部署中的应用,为企业提供了高效的自动化部署解决方案。 ... [详细]
  • 本文详细介绍了在 Android 7.1 系统中调整屏幕分辨率和默认音量设置的方法。针对系统默认音量过大的问题,提供了具体的步骤来降低系统、铃声、媒体和闹钟的默认音量,以提升用户体验。此外,还涵盖了如何通过系统设置或使用第三方工具来优化屏幕分辨率,确保设备显示效果更加清晰和流畅。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 看官_在GitHub Actions上进行Flutter 的测试和部署
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了在GitHubActions上进行Flutter的测试和部署相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
久居我心入我怀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有