Flutter 应用本地存储与云存储的最佳选择
视频
前言
本文深入探讨Flutter应用中本地存储和云存储的选择因素,帮助开发者根据需求选择最合适的存储方案。
参考
- https://docs.flutter.dev
- https://firebase.google.com/docs/storage
- https://docs.hivedb.dev
- https://www.mongodb.com/resources/basics/databases/nosql-explained
- https://pub.dev/packages/sqflite
考虑因素
可共享的内容
这个不需要太多思考:如果我们的应用有用户生成的内容,并且这些内容可以在用户之间共享,那么我们就需要云存储。 而我们,可能需要本地存储来保存草稿。
设备同步
同理。如果应用程序在多个平台(通常是网页和移动设备,例如 X、Fb、Whatsap)上运行,我们需要云存储。
用户管理
如果应用程序管理用户,即需要注册、登录等——我们需要一个云。
所需的存储量
如果我们的应用程序需要大量存储,我们应该考虑使用云。
由于频繁的数据加载导致的不良用户体验
如果我们应用程序频繁读取/写入数据,我们可能需要考虑使用本地存储选项。
敏感数据的保护
一些用户可能因为隐私问题而更喜欢具有本地存储的应用程序。
服务器端更新
假设我们制作了一个教育应用程序。在某个时候,我们想要添加更多的课程。如果内容存储在云端,我们就无需在应用商店更新整个应用程序来添加更多内容。
实施成本
本地存储通常更容易实现。
存储成本
本地存储总是免费的。但是,类似的数量的数据在某些云存储中也是免费的。
本地方案
shared_preferences
https://pub.dev/packages/shared_preferences
简单键值存储插件,适用于存储小型数据,如用户设置和应用偏好。它易于使用,跨平台支持,能够快速读取和写入数据。
Hive
高性能 NoSQL 键值存储库,支持存储复杂对象。它快速、轻量且易于使用,适合离线应用,提供强大的数据加密功能,帮助开发者实现高效和安全的数据存储解决方案。
Isar (NoSQL)
高性能 NoSQL 数据库,支持复杂查询和数据关系。它具备快速的读写速度和高效的存储结构,适合大规模数据管理,提供简单的 API,帮助开发者轻松实现本地数据持久化和同步功能。
Sembast (NoSQL)
https://pub.dev/packages/sembast
轻量级 NoSQL 数据库,使用简单的键值存储。它支持离线访问和实时数据更新,适合快速开发应用。具备灵活的查询功能和可扩展性,帮助开发者高效管理本地数据。
Objectbox (键值)
https://pub.dev/packages/objectbox
API 与 Hive 类似。键值存储。高性能键值数据库,专注于快速数据存储和检索。它支持复杂对象和关系,具有自动同步和离线访问功能,易于集成,帮助开发者构建高效和响应迅速的移动应用。
get_storage (键值)
https://pub.dev/packages/get_storage
轻量级键值存储解决方案,设计简单易用。它支持快速读写和持久化存储,适合保存小型数据,如用户设置。提供跨平台支持,帮助开发者轻松实现数据持久化,提升用户体验。
与 Hive 类似。键值存储。不能用于存储复杂对象。或者你应该先将其序列化为 JSON。
Realm (NoSQL)
https://pub.dev/packages/realm
NoSQL 数据库。由 MongoDB 公司创建。
高性能 NoSQL 数据库,专注于快速数据存储和查询。它支持实时数据同步、复杂数据关系和跨平台使用,提供简单易用的 API,帮助开发者构建高效、响应迅速的移动应用。
sqflite (SQL)
https://pub.dev/packages/sqflite
适用于 Flutter 的 SQLite 插件。支持 iOS、Android 和 MacOS。
sqflite 是 Flutter 的 SQLite 插件,提供强大的关系型数据库支持。它适用于高效的本地数据存储,支持复杂查询和事务处理,具备良好的性能和易用性,帮助开发者轻松管理应用中的数据。
Drift (SQL 和 Dart 查询)
https://pub.dev/packages/drift
Drift
是 Flutter 的反应式持久化库,基于 SQLite,支持强大的查询功能和类型安全。它提供简洁的 API,方便开发者进行数据迁移和管理,适合构建复杂应用,提升数据操作的灵活性和效率。
远程方案
cloud_firestore (NoSQL)
https://pub.dev/packages/cloud_firestore
Flutter 的 NoSQL 云数据库插件,支持实时数据同步、灵活的数据结构和强大的查询功能。它适用于构建动态应用,允许开发者轻松管理和存储用户生成的数据,增强用户体验。
firebase_storage
https://pub.dev/packages/firebase_storage
云文件存储解决方案,类似于 Amazon S3。它支持上传、下载和管理大文件,提供安全的访问控制,适用于存储用户生成内容和静态资源,帮助开发者轻松集成文件存储功能。
firebase_database (NoSQL 实时)
https://pub.dev/packages/firebase_database
实时 NoSQL 数据库,支持数据的实时同步和离线访问。它适合构建聊天应用和社交平台,允许开发者轻松管理用户数据,提供高效的数据读写和自动更新功能,提升用户互动体验。
firebase_auth
https://pub.dev/packages/firebase_auth
用户身份验证解决方案,支持多种登录方式,如邮箱、社交媒体和匿名登录。它提供安全的用户管理功能,简化注册和登录流程,帮助开发者快速集成身份验证,提升应用的安全性和用户体验。
pocketbase (NoSQL)
https://pub.dev/packages/pocketbase
用于与 PocketBase Web API 交互的官方多平台 Dart SDK。 通常,Pocketbase 是自托管解决方案,但也有完全免费的 pockethost.io 服务。Pocketbase 是 Firebase 的自托管替代品,提供了或多或少相同的功能:身份验证、数据存储等。在 $5 的 DigitalOcean 虚拟机上自托管的版本可以管理多达 10,000 名用户。虽然我自己没有试过,但网上很多人都说它非常容易使用。
supabase_flutter (SQL)
https://pub.dev/packages/supabase_flutter
用于 Supabase 的 Flutter 客户端库。 Supabase 是基于 Postgres 的云应用后端服务。也存在自托管选项,但使用起来并不方便。
appwrite (NoSQL)
https://pub.dev/packages/appwrite
Appwrite Flutter SDK。 Appwrite 是一个云应用后端服务,也提供了一个获得大量好评的自托管选项。
小结
在Flutter应用开发中,选择本地存储与云存储至关重要。本文分析了多种存储选项,包括shared_preferences、Hive、Firebase等,帮助开发者根据共享内容、设备同步、用户管理等因素做出明智的决策。通过理解各类存储方案的优缺点,开发者能够更有效地提升用户体验,并满足不同应用需求。
感谢阅读本文
如果有什么建议,请在评论中让我知道。我很乐意改进。
猫哥 APP
flutter 学习路径
- Flutter 优秀插件推荐
- Flutter 基础篇1 - Dart 语言学习
- Flutter 基础篇2 - 快速上手
- Flutter 实战1 - Getx Woo 电商APP
- Flutter 实战2 - 上架指南 Apple Store、Google Play
- Flutter 基础篇3 - 仿微信朋友圈
- Flutter 实战3 - 腾讯即时通讯 第一篇
- Flutter 实战4 - 腾讯即时通讯 第二篇
© 猫哥 ducafecat.com
end