You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter应用中使用本地存储实现收藏按钮功能及方案选型

Flutter语录应用收藏功能存储方案选型建议

需求匹配度前置判断

你当前需要存储的核心数据仅为「已收藏的页码集合」,属于结构简单、体量极小的非结构化数据,两种方案都可以实现,差异主要在学习成本和扩展性。


方案1:Shared Preferences

适用场景

适合仅需要实现当前两个核心需求、追求快速落地功能的情况

  • 优势:
    • 学习成本极低,无需掌握SQL语法、表结构设计,仅需调用简单的键值对读写API
    • 集成和使用门槛极低,几行代码就能完成读写逻辑,新手半天就能跑通整个收藏功能
    • 性能完全满足当前需求,哪怕存几百个收藏页码也不会有卡顿问题
    • 简单读写示例:
      // 写入收藏页码
      final prefs = await SharedPreferences.getInstance();
      await prefs.setStringList('fav_pages', favPageList.map((page) => page.toString()).toList());
      
      // 读取收藏页码
      final List<String>? storedFavs = prefs.getStringList('fav_pages');
      final List<int> favPages = storedFavs?.map((str) => int.parse(str)).toList() ?? [];
      
  • 劣势:
    • 仅支持基础数据类型存储,无法直接存储结构化的复杂数据,如果后续要扩展收藏功能(比如存储语录内容、收藏时间、分类标签),需要完全重构存储逻辑
    • 不支持条件查询、排序、批量修改等操作,数据量超过千条后读写性能会明显下降

方案2:SQLite

适用场景

适合想借练习项目积累更多技术经验、后续打算扩展APP功能的情况

  • 优势:
    • 支持结构化数据存储,后续给收藏功能加任意扩展字段都不需要重构存储层
    • 支持条件查询、排序、批量增删改等操作,哪怕存储上万条收藏数据性能也十分稳定
    • 可以掌握移动端关系型数据库的开发经验,对后续开发复杂Flutter项目有帮助
  • 劣势:
    • 学习成本更高,需要掌握基础SQL语法、表结构设计,要么手写SQL语句搭配sqflite库使用,要么额外学习floor、drift等ORM库的使用
    • 代码量是Shared Preferences方案的2-3倍,对于当前的最小需求来说属于过度设计

最终选型建议

  • 优先选 Shared Preferences:如果你只是想快速完成当前练习项目的核心需求,不需要额外扩展功能,这个方案是投入产出比最高的选择
  • 可选 SQLite:如果你想借这个项目多掌握一项常用存储技术,后续还计划给语录APP加更多功能(比如收藏搜索、导出备份、语录备注),可以直接选SQLite一步到位

内容的提问来源于stack exchange,提问作者Arefin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:24:03