Flutter:在本地存储地图的最佳方式?

Flutter : best way to store maps locally?

在本地存储数据的最佳方式是什么。假设我正在创建一个存储交易的应用程序并且我需要保存 ID(因为它们可能是许多具有相同名称的交易)、标题、金额和时间。 我可以使用共享首选项来做到这一点还是有其他方法可以做到这一点?谢谢你的回答。

你可能会喜欢Hive Hive 是一个强大的数据库,如果您正在寻找出色的性能,这就是它

Shared Preference 让您可以轻松地在几行中读写 key-value 对。但共享偏好不是您保留复杂数据的解决方案。您应该将这些数据保存在数据库中。

您有两种主要的选择:

  1. Relational — 这些是传统意义上的数据库。它们不仅存储数据,还存储数据之间的关系。 SQLite 是关系数据库的一个例子。

SQflite 是 SQLite for Flutter 的一个实现。它使您可以完全控制您的数据库、查询和关系。

优点

对数据库的完全控制。 适用于您的应用程序的非常高效的 SQLite 数据库(前提是您拥有 pre-existing SQLite 知识)。

缺点

手写所有查询可能会花费很多时间。

从数据库返回的数据从一开始就不是强类型的。

在设备上处理迁移可能很困难(例如,当架构在版本更新之间发生变化时)。

不支持网络。

  1. NoSQL — 这些数据库将数据存储为文档。模式不像关系数据库那样强制执行。它们 lightning-quick 并且可以很好地处理大量非结构化数据。 MongoDB 是 NoSQL 数据库的示例。

Hive — 离线 NoSQL 存储

Hive 是 Fl​​utter 开发人员的一个极快的 NoSQL 存储选项。它最大的卖点是完全原生于Dart。

Hive 允许您将数据存储为 HiveObject,这也允许对象之间存在某些关系。它将对象存储在一个盒子中,但您可以为它们生成 TypeAdapter。

创建一个盒子相当简单:

var box = await Hive.openBox('testBox');

读写一样简单:

import 'package:hive/hive.dart';
void main() async {
 var box = await Hive.openBox('testBox');
 box.put('name', 'David');
 
 print('Name: ${box.get('name')}');
}

如果从 hive 包自述文件页面获取此基准: