如何使用 Flutter 保存到本地存储?

How to save to local storage using Flutter?

在 Android 中,如果我有想要跨会话保留的信息,我知道我可以使用 SharedPreferences 或创建 SQLite 数据库,甚至可以将文件写入设备并稍后读取。

有没有办法只使用Flutter来保存和恢复这样的数据?或者我是否需要像 services example?

中那样为 Android 和 iOS 编写特定于设备的代码

有几个选项:

您可以使用来自 flutter 官方插件的共享首选项https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Android 使用共享首选项,iOS 使用 NSUserDefaults。

如果您想要保存一个小值以供日后参考。那么您应该使用 shared_preferences

将数据存储为键值数据

但是如果你想存储大数据,你应该使用 SQLITE

但是您始终可以使用离线可用的 firebase 数据库

由于我们谈论的是本地存储,因此您始终可以将文件读写到磁盘

其他解决方案:

我认为如果您要在本地存储中存储大量数据,您可以使用 sqflite 库。它的设置非常简单,我个人已经在一些测试项目中使用过,效果很好。

https://github.com/tekartik/sqflite 这是一个教程 - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

如果您想将数据存储在云中,您可以使用 firebase。这是 google.

提供的可靠服务

https://firebase.google.com/docs/flutter/setup

如果您只需要存储简单的值,例如 API 令牌或登录数据(不是密码!),这是我使用的:

import 'package:shared_preferences/shared_preferences.dart';

asyncFunc() async { // Async func to handle Futures easier; or use Future.then
  SharedPreferences prefs = await SharedPreferences.getInstance();
}
...

// Set
prefs.setString('apiToken', token);

// Get
String token = prefs.getString('apiToken');

// Remove
prefs.remove('apiToken');

不要忘记在 pubspec.yaml 中添加 shared_preferences 依赖项(保留间距格式):

dependencies:

  shared_preferences: any

有几个选项:

Moor:Dart 的持久性库

读写文件

flutter 的共享首选项插件

用于 flutter 的 SQlite

迟到的回答,但我希望它对以后访问这里的人也有帮助..

我会提供保存的类别和各自的最佳方法...

  1. 共享首选项 在存储上存储简单值时使用此选项,例如颜色主题、应用程序语言、上次滚动位置(在阅读应用程序中)。这些是您希望在应用程序重新启动时保留的简单设置。 但是,您可以使用它来存储大型内容(列表、地图、图像),但这需要序列化和反序列化。要了解有关此反序列化和序列化的更多信息,请转到here.
  2. 文件 当你有更多由你定义的数据时,这很有帮助,例如日志文件、图像文件,也许你想导出 csv 文件。我听说一旦磁盘用完 space..我不确定,因为我从未见过它.. 除了借助序列化和反序列化之外,这也可以存储几乎所有内容..
  3. 保存到数据库 这对于有点复杂的数据非常有用。而且我认为这不会被光盘清洁器清洗掉,因为它存储在 A​​ppData(for android).. 在此,您的数据存储在 SQLite 数据库中。它的插件是SQFLite。 您可能想放入此处的各种数据就像数据库可以表示的所有数据一样。

您可以使用Localstorage

flutter pub add localstorage

1- 添加依赖到 pubspec.yaml (Change the version based on the last)

dependencies:
  ...
  localstorage: ^4.0.0+1

2- 然后运行下面的命令

flutter packages get

3- 导入本地存储:

import 'package:localstorage/localstorage.dart';

4- 创建实例

class MainApp extends StatelessWidget {
  final LocalStorage storage = new LocalStorage('localstorage_app');
  ...
}

添加 项到 lcoalstorage :

void addItemsToLocalStorage() {
  storage.setItem('name', 'Abolfazl');
  storage.setItem('family', 'Roshanzamir');

  final info = json.encode({'name': 'Darush', 'family': 'Roshanzami'});
  storage.setItem('info', info);
}

从 lcoalstorage 获取 一个项目:

void getitemFromLocalStorage() {
  final name = storage.getItem('name'); // Abolfazl
  final family = storage.getItem('family'); // Roshanzamir
  
  Map<String, dynamic> info = json.decode(storage.getItem('info'));
  final info_name=info['name'];
  final info_family=info['family'];
}

从本地存储中删除 一个项目:

void removeItemFromLocalStorage() {
  storage.deleteItem('name');
  storage.deleteItem('family');
  storage.deleteItem('info');
}

您可以在 flutter 应用程序中使用 SharedPreferences for small amount of data. But if you have large and complex data then you should use Sqlite Database 作为本地存储。

我一直在寻找相同的、简单的本地存储,但也具有合理的安全级别。我发现最有意义的两个解决方案是 flutter_secure_storage (as mentioned by ) for the small stuff, and hive 适用于较大的数据集。