Dart面试题更新 2026-08-05

在 Flutter 开发中,本地数据的持久化可以采用哪些方式?请说明 shared_preferences 与 sqflite 这两类方案的定位差异以及各自适用的数据规模和读写场景。

技术原理技术选型方案权衡Flutter

考察说明

考查候选人对 Flutter 本地存储方案的掌握程度,能否根据数据形态和业务需求选择恰当的持久化方案。

回答思路

  1. 【回答框架 1】shared_preferences 是一种基于键值对的轻量级存储方案,适用于存储小体积的配置项、用户设置、简单状态等,如登录状态、主题颜色。它内部在 Android 上基于 SharedPreferences,在 iOS 上基于 NSUserDefaults,本质是将键值数据以 plist 或 XML 文件写入本地。
  2. 【回答框架 2】sqflite 是 Flutter 中对 SQLite 的插件封装,提供了完整的关系型数据库功能,支持结构化数据、多表关联、复杂查询和事务。适用于数据量大、结构复杂、需要频繁增删改查的场景,如商品列表、用户信息系统等。
  3. 【回答框架 3】两者的主要区别在于数据模型和容量:shared_preferences 适合小型非结构化数据,读写速度快但无法高效查询和存储大数据量;sqflite 适合结构化、大数据量,支持 SQL 语言,但需要编写数据库建表语句和操作代码,学习和使用成本更高。
  4. 【回答框架 4】选择方案时,应根据业务需求权衡:若只需保存少量设置,优先用 shared_preferences;若需要存储商品列表等动态数据并支持搜索排序,应使用 sqflite;也可结合使用,如用户偏好用 shared_preferences,业务数据用 sqflite。
  5. 【回答框架 5】在实际项目中也存在其他方案如 Hive、ObjectBox 等,但核心在于理解键值存储与关系型数据库的差异。回答时点明适用场景和取舍即可,不必深入源码。
  6. 【关键点 1】shared_preferences:键值对存储,适合小型、简单配置数据,读写快。
  7. 【关键点 2】sqflite:SQLite 数据库,支持 SQL 查询、事务,适合结构化、大数据量。
  8. 【关键点 3】选择依据:数据规模、结构复杂度、查询需求。
  9. 【关键点 4】两者可互补使用:设置用 shared_preferences,业务数据用 sqflite。
  10. 【易错点 1】不要无条件认为 shared_preferences 是异步的,其底层在 API 层面提供了异步接口,但本质是同步读写,注意不要用于大文件存储。
  11. 【易错点 2】sqflite 的查询操作默认是异步的,但事务操作需注意并发和安全,避免在主线程进行耗时操作。
  12. 【易错点 3】避免将 shared_preferences 用于存储敏感信息(如密码),因为其未加密,应使用 secure storage 方案。