【Flutter 面试题】Flutter如何进行本地存储和缓存数据?

【Flutter 面试题】Flutter如何进行本地存储和缓存数据?

文章目录

    • 写在前面
    • 口述回答
    • 补充说明
      • 实际案例
      • 完整代码示例
      • 运行结果
      • 详细说明

写在前面

🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。

👏🏻 正在学 Flutter 的同学,你好!

😊 Flutter 面试宝典是解决 Flutter 面试过程中可能出现的问题,而进行汇总整理的。一个问题一篇文章,优化答案,更适合面试过程中的口述满足实际面试需求

🔍 想解决开发中的高频零散问题?碎片化教程 👉 Flutter Tips

🔍 想深入学习 Flutter?系统化教程 👉 Flutter 从0到1 基础入门到应用上线全攻略 & 专栏指引

👥 快来和我们一起交流!👉 讨论群在这里,和大家一起进步!

口述回答

在构建 Flutter 应用时,合理选择本地存储数据缓存机制对于优化性能和提升用户体验至关重要。

以下是几种主要的本地存储技术,每种技术都适用于不同的使用场景:

  1. shared_preferences 是 Flutter 应用中实现轻量级数据持久化的标准解决方案。它主要用于存储小量的键值对数据,如用户设置或应用配置。这种方法以其简单易用和高效的性能特别适合管理简单的用户偏好

  2. sqflite,基于 SQLite 的存储方案,为 Flutter 应用提供了全功能的关系型数据库支持。它允许开发者执行 SQL 语句进行数据的增删改查操作,非常适合需要存储大量结构化数据的场景。sqflite 支持事务、批量操作和复杂查询,为数据持久化提供了强大的灵活性和扩展性。

  3. hive 以其出色的性能和直观的 API 而著称,是一个为 Dart 和 Flutter 专门设计的轻量级键值对数据库hive 支持存储复杂的数据结构,如列表和地图,且不需要事先定义模式。它特别适合需要快速读写操作的应用场景,并且可以在不同的 Flutter 平台上无缝工作。

  4. 文件存储 通过直接在设备文件系统上读写数据文件,提供了极高的灵活性。开发者可以使用 Dart 的 dart:io 库来操作文件,以存储和检索自定义格式的数据,如 JSON 文档、图片或其他二进制文件。这种方法适合于数据量大或数据结构复杂的场景,需要开发者手动管理文件的创建、读写和删除操作。

选择合适的本地存储方案需要综合考虑数据的类型、量级、访问频率以及特定平台的特性。shared_preferences 适用于轻量数据存储,sqflitehive 提供了更复杂的数据管理能力,而直接的 文件存储 则在处理大型或自定义数据时提供了最大的灵活性。

补充说明

为了帮助理解 Flutter 中的本地存储和数据缓存,我们将通过一个简单的实际案例演示如何使用 shared_preferences 来存储和检索用户设置。

实际案例

我们的目标是创建一个简单的 Flutter 应用,它允许用户通过开关控件开启或关闭某个功能,并且应用会记住用户的选择。即使应用关闭再重新打开,之前的设置也会被保留。

完整代码示例

首先,你需要在你的 pubspec.yaml 文件中添加 shared_preferences 包的依赖项:

dependencies:flutter:sdk: fluttershared_preferences: ^2.2.2

然后,下面是我们的 Flutter 应用代码:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: SettingsScreen(),);}
}class SettingsScreen extends StatefulWidget {_SettingsScreenState createState() => _SettingsScreenState();
}class _SettingsScreenState extends State<SettingsScreen> {bool _isFeatureEnabled = false;void initState() {super.initState();_loadSettings();}// 从 shared_preferences 加载设置_loadSettings() async {final prefs = await SharedPreferences.getInstance();setState(() {_isFeatureEnabled = prefs.getBool('featureEnabled') ?? false;});}// 更新设置并保存到 shared_preferences_updateSettings(bool newValue) async {final prefs = await SharedPreferences.getInstance();setState(() {_isFeatureEnabled = newValue;prefs.setBool('featureEnabled', _isFeatureEnabled);});}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('设置'),),body: SwitchListTile(title: Text('启用某功能'),value: _isFeatureEnabled,onChanged: _updateSettings,),);}
}

运行结果

当你运行这段代码时,你会看到一个包含开关控件的设置页面。用户可以通过开关控件来启用或禁用某个功能。当用户更改设置时,这个设置会被保存到 shared_preferences 中。因此,即使应用被关闭,当应用下次启动时,之前的设置也会被恢复。

image-20240320205647539

详细说明

  • 我们定义了一个 SettingsScreen StatefulWidget,因为我们需要管理设置的状态。
  • _loadSettings 方法中,我们使用 SharedPreferences.getInstance() 获取 SharedPreferences 的实例,然后通过 getBool 方法检索 'featureEnabled' 键对应的值。如果这个键不存在,我们假定该功能被禁用(即返回 false)。
  • _updateSettings 方法用于更新设置的状态,并通过 setBool 方法将新的设置值保存到 shared_preferences 中。

这个例子展示了如何使用 shared_preferences 在 Flutter 应用中进行简单的本地数据存储和检索,这对于管理用户偏好设置等轻量级数据非常有用。

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

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

相关文章

两个免费的wordpress主模板

wordpress免费网站主题 蓝色高端大气上档次的wordpress免费网站主题&#xff0c;首页大图wordpress模板。 https://www.wpniu.com/themes/31.html WP免费模板 用粉色高端大气上档次的WP免费模板&#xff0c;建个网站也不错的。 https://www.wpniu.com/themes/16.html

npm ERR! code ELIFECYCLE 解决办法

npm ERR! code ELIFECYCLE 解决办法 问题分析可能原因解决方法 问题 使用Vue脚手架构建项目的时候出现npm ERR! code ELIFECYCLE 分析可能原因 vue-cli-service 并没有加入到环境变量里 解决方法 ./node_modules/.bin/vue-cli-service serve

Day74:WEB攻防-机制验证篇重定向发送响应状态码跳过步骤验证码回传枚举

目录 验证码突破-回传显示&规律爆破 某目标回显显示 某APP验证码爆破 验证目标-重定向用户&重定向发送 某CMS重定向用户 某CMS重定向发送 验证逻辑-修改响应包&跳过步骤URL 某APP修改响应包 某APP跳过步骤URL 实战SRC验证逻辑挖掘分享案例 短信验证码回…

SpringCloud Alibaba Nacos 服务注册和配置中心

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十二篇&#xff0c;即介绍 SpringCloud Alibaba Nacos 服务注册和配置中心。 二、Nacos 简介 2.1 为…

HarmonyOS(鸿蒙)应用开发——(一)

目录 1 创建hellopro项目 2 了解ArkTS 3 了解ArkTS的组件 4 组件介绍 4.1 常用基础组件&#xff1a; 4.1.1 Text 4.1.2 Button 4.1.3 TextInput 4.2 容器组件 4.2.1 Column 4.2.2 Row 5 案例——实现一个简易登录页面 5.1 在实现预览效果之前&#xff0c;我们…

MCU技术的创新浪潮与产业变革

MCU技术的创新浪潮与产业变革 一、MCU技术的创新发展 MCU&#xff0c;即微控制器&#xff0c;作为现代电子设备的核心部件&#xff0c;一直在不断地创新与发展。随着科技的进步&#xff0c;MCU的性能得到了极大的提升&#xff0c;功能也越来越丰富。从8位到32位&#xff0c;再…

【SpringMVC】知识汇总

SpringMVC 短暂回来&#xff0c;有时间就会更新博客 文章目录 SpringMVC前言一、第一章 SpingMVC概述二、SpringMVC常用注解1. Controller注解2. RequestMapping注解3. ResponseBody注解4. RequestParam5. EnableWebMvc注解介绍6. RequestBody注解介绍7. RequestBody与RequestP…

echart多折线图堆叠 y轴和实际数据不对应

当使用 ECharts 绘制堆叠折线图时&#xff0c;有时会遇到 y 轴与实际数据不对应的问题。 比如明明值是50&#xff0c;但折线点在y轴的对应点却飙升到了二百多 解决办法&#xff1a; 查看了前端代码发现在echart的图表中有一个‘stack’的属性&#xff0c;尝试把他删除之后y轴的…

探索vLLM:释放超大规模语言模型的力量

背景 vLLM是伯克利大学LMSYS组织开源的大语言模型高速推理框架,旨在极大地提升实时场景下的语言模型服务的吞吐与内存使用效率。vLLM是一个快速且易于使用的库,用于 LLM 推理和服务,可以和HuggingFace 无缝集成。vLLM利用了全新的注意力算法「PagedAttention」,有效地管理注…

分布式游戏服务器

1、概念介绍 分布式游戏服务器是一种专门为在线游戏设计的大型系统架构。这种架构通过将游戏服务器分散部署到多台计算机&#xff08;节点&#xff09;上&#xff0c;实现了数据的分散存储和计算任务的并行处理。每个节点都负责处理一部分游戏逻辑和玩家请求&#xff0c;通过高…

应急响应靶机训练-Web3题解

前言 接上文&#xff0c;应急响应靶机训练-Web3。 前来挑战&#xff01;应急响应靶机训练-Web3 题解 首先登录用户administrator 寻找隐藏用户 找到隐藏用户hack6618$ 然后去找apache的日志文件 分析得出两个IP地址 192.168.75.129 192.168.75.130 然后更换hack6618$的…

Offline RL : SEABO: A Simple Search-Based Method for Offline Imitation Learning

NIPS 2024 paper Intro 离线强化学习一般需要带奖励标签的数据&#xff0c;而现实中这种标签获取困难。本文提出一种基于搜索的离线方法SEABO。SEABO以无监督学习的方式&#xff0c;对最接近专家演示的transaction较大的奖励&#xff0c;否则分配较小的奖励。 Method SEAB…

Flume-transaction机制源码分析

一、整体流程 FileChannel主要是由WAL预写日志和内存队列FlumeEventQueue组成。 二、Transaction public interface Transaction {// 描述transaction状态enum TransactionState { Started, Committed, RolledBack, Closed }void begin();void commit();void rollback();voi…

Introduction to Data Mining 数据挖掘

Why Data Mining? • The Explosive Growth of Data: from terabytes to petabytes — Data collection and data availability ◦ Automated data collection tools, database systems, Web, computerized society — Major sources of abundant data ◦ Business: Web, e-co…

哔哩哔哩秋招Java二面

前言 作者&#xff1a;晓宜 个人简介&#xff1a;互联网大厂Java准入职&#xff0c;阿里云专家博主&#xff0c;csdn后端优质创作者&#xff0c;算法爱好者 一面过后面试官叫我别走&#xff0c;然后就直接二面&#xff0c;二面比较简短&#xff0c;记录一下&#xff0c;希望可以…

JWT 认证机制

1. 了解 Session 认证的局限性 Session 认证机制需要配合 Cookie 才能实现。由于 Cookie 默认不支持跨域访问&#xff0c;所以当涉及到前端跨域请求后端接口的时候&#xff0c;需要做很多额外的配置&#xff0c;才能实现跨域 Session 认证 注意&#xff1a; 1. 当前端请求后端接…

AMPQ和rabbitMQ

RabbitMQ 的 Channel、Connection、Queue 和 Exchange 都是按照 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;标准实现的。 AMPQ的网络部分 AMQP没有使用HTTP&#xff0c;使用TCP自己实现了应用层协议。 AMQP实现了自己特有的网络帧格式。 一个Connection…

用 Visual Studio 调试器中查看内存中图像

返回目录&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 前一篇&#xff1a;OpenCV4.9.0在windows系统下的安装 后一篇&#xff1a;OpenCV-Java 开发简介 ​警告 本教程可以包含过时的信息。 Image Watch 是 Microsoft Visual Studio 的插件&a…

气膜馆建造成本高吗?专业气膜厂家告诉你!

气膜馆作为一种现代化建筑结构&#xff0c;在体育、娱乐和展览领域备受青睐。然而&#xff0c;对于许多人来说&#xff0c;最关心的问题之一就是建造气膜馆的成本。下面轻空间气膜厂家将带您深入探讨气膜馆的建设成本&#xff0c;特别关注每平米的建设成本是多少&#xff0c;以…

matlab 将矩阵写入文件

目录 一、概述1、算法概述2、主要函数二、将矩阵写入到文本文件三、将矩阵写入电子表格文件四、将矩阵写入指定的工作表和范围五、将数据追加到电子表格六、将矩阵数据追加到文本文件七、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此…