如何在 Flutter 中直接持久化存储 JSON 数据以供查询和离线使用?

Posted

技术标签:

【中文标题】如何在 Flutter 中直接持久化存储 JSON 数据以供查询和离线使用?【英文标题】:How to persistently store JSON data directly in Flutter for querying and offline use? 【发布时间】:2019-09-19 04:22:50 【问题描述】:

在 Flutter 应用中持久存储从 RESTful API 提取的 JSON 数据(供离线使用)的最佳方式是什么?

有没有比 sqflite 更简单的方法?

谢谢!

【问题讨论】:

另存为文件。 【参考方案1】:

共享首选项是一种在移动应用中保存数据的简单方法。 Flutter 也有:https://pub.dartlang.org/packages/shared_preferences

【讨论】:

如果以这种方式存储,有没有办法查询JSON? 您可以只存储 json 字符串,将其作为字符串检索回来,然后使用其中一个 JSON 库。以下是有关如何在 Flutter 中使用 JSON 的更多信息:flutter.dev/docs/development/data-and-backend/json 好的,最后一个问题,这是一个 CRUD 应用程序,所以我必须在收集新数据时离线存储信息。 JSON被序列化为对象列表,我在所述对象列表中收集新数据,当我的应用程序即将关闭时,有没有办法触发共享首选项中的离线(持久)存储? 我想这样可以做到:github.com/flutter/flutter/issues/19594 但是,我不会等待应用程序关闭以防万一您的应用程序可能以其他方式死亡。【参考方案2】:

要为离线工作保留 JSON,一个不错的选择是使用 couchbase lite,因为它是一个 NoSql 数据库。这意味着您可以对其执行查询。 您可以使用 fluttercouch 来处理颤振。 关于您在应用程序即将关闭时保存信息的问题?你最好在它进入前台时保存它。 您可以使用 didChangeAppLifecycleState 事件 来处理这种情况。 希望对您有所帮助。

【讨论】:

我想我要试试 Sembast:pub.dartlang.org/packages/sembast 我会告诉你进展如何。感谢您的建议! 这两个操作系统都内置了吗?我猜这会大大增加应用程序的大小?【参考方案3】:

共享偏好对于您想要完成的任务来说并不是一个好的解决方案。

我会读写一个本地文件: https://flutter.dev/docs/cookbook/persistence/reading-writing-files

我会使用观察者来不断保存更改。

【讨论】:

【参考方案4】:

事实证明,使用 NoSQL 嵌入式数据库 Sembast 是最佳选择。由制作 SQFLite 的同一个人制作!

【讨论】:

以上是关于如何在 Flutter 中直接持久化存储 JSON 数据以供查询和离线使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter中将图像数据保存到sqflite数据库以进行持久化

如何直接保存到持久存储,而不将数据保存到内存中

Flutter学习日记之shared_preferences持久化存储的使用

在 Flutter/Dart 中从 JSON 数组中提取数据

[译]Flutter JSON和序列化

如何让我们的列表持久化,同时在 Flutter 应用程序中导航到不同的屏幕?