Logo
Section 1 / 7

数据持久化概念

了解如何在您的 Flutter 应用中本地持久化数据。

导入

数据持久化概念

了解如何在您的 Flutter 应用中本地持久化数据。

Flutter 中的数据持久化

大多数移动应用都需要处理数据。如果每次重启应用时数据都丢失,将会非常令人沮丧。将应用数据保存在非易失性存储中,使得即使应用完全关闭并重新启动后数据依然可用,这一过程称为数据持久化。

数据持久化具有以下优势:

  • 持久化数据在用户关闭应用后仍然保留,允许用户从上次中断的地方继续操作。
  • 即使在网络连接中断或离线状态下,用户也能持续使用应用进行工作。
  • 只有用户自己可以删除持久化数据,这确保了后续仍可访问这些数据。

Flutter 提供了多种数据持久化选项供我们选择,包括:

  • 键值存储
  • 文件存储
  • 本地数据库
  • 远程数据存储

键值存储

在此方案中,数据以键值对的形式存储。键是对应值的唯一标识符。iOS 和 Android 均提供了原生机制来将键值对数据存储到磁盘上:iOS 使用 NSUserDefaults,Android 使用 SharedPreferences。Flutter 提供了 shared_preferences 插件,它封装了这两个平台的原生实现。

shared_preferences 插件用于存储基本数据类型,包括:

  • 数字
  • 字符串
  • 布尔值

我们可以使用该插件来保存一些小型应用功能,例如:

  • 用户进度(如游戏中的关卡进展)
  • 用户偏好设置(如深色模式与浅色模式切换)
  • 用户凭证(如认证令牌,根据用户是否登录来决定显示哪些内容)

不建议在以下情况使用 shared_preferences 插件:

  • 存储复杂数据结构
  • 存储敏感信息(如密码)

文件存储

有时我们需要读写磁盘上的文件。Flutter 提供了一个基于磁盘的文件系统,可以通过 File 类 来使用。

每个应用都有一个命名的内部存储目录,用于存放仅限该应用访问的私有文件。当应用被卸载时,系统会自动删除这些保存的文件。

文件存储可用于保存以下类型的内容:

  • 文档
  • 加密信息
  • 媒体内容

本地数据库

当需要存储大量结构化数据时,应使用数据库而非文件存储或键值存储。数据库是一种可靠且易于访问的组织化数据集合。

Android 和 iOS 都支持基于 SQL 的 SQLite 数据库管理系统(DBMS)。SQLite 的特点包括:

  • 使用单个文件存储所有数据表。
  • 体积小且自包含,无需外部依赖。
  • 无需额外配置即可直接使用。
  • 支持在一个连接中同时访问多个数据库文件。
  • 使用前需具备一定的 SQL 知识。

Flutter 可通过 sqflite 插件 或 Moor 包 来使用 SQLite 数据库管理系统。

远程数据库

使用本地数据库、文件存储或键值存储时,可能会遇到以下两个问题:

  • 当用户卸载应用时,应用数据会丢失。
  • 用户在另一台设备上登录时,无法访问之前存储的数据。

为解决这些问题,我们需要将数据存储在远程数据库中,例如 Firebase 的 实时数据库 或 Cloud Firestore。

部署

键值存储