如何使用 Flutter 保存到本地存储?
How to save to local storage using Flutter?
在 Android 中,如果我有想要跨会话保留的信息,我知道我可以使用 SharedPreferences 或创建 SQLite 数据库,甚至可以将文件写入设备并稍后读取。
有没有办法只使用Flutter来保存和恢复这样的数据?或者我是否需要像 services example?
中那样为 Android 和 iOS 编写特定于设备的代码
有几个选项:
- 读写文件:https://flutter.io/reading-writing-files/
- 通过 Flutter 插件的 SQLite:https://github.com/tekartik/sqflite
- 通过 Flutter 插件的 SQLCipher:https://github.com/drydart/flutter_sqlcipher
- SharedPreferences 通过 Flutter 插件:https://github.com/flutter/plugins/tree/master/packages/shared_preferences
- Localstore 通过 Flutter 插件:https://pub.dev/packages/localstore
您可以使用来自 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.
提供的可靠服务
如果您只需要存储简单的值,例如 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
迟到的回答,但我希望它对以后访问这里的人也有帮助..
我会提供保存的类别和各自的最佳方法...
- 共享首选项
在存储上存储简单值时使用此选项,例如颜色主题、应用程序语言、上次滚动位置(在阅读应用程序中)。这些是您希望在应用程序重新启动时保留的简单设置。
但是,您可以使用它来存储大型内容(列表、地图、图像),但这需要序列化和反序列化。要了解有关此反序列化和序列化的更多信息,请转到here.
- 文件
当你有更多由你定义的数据时,这很有帮助,例如日志文件、图像文件,也许你想导出 csv 文件。我听说一旦磁盘用完 space..我不确定,因为我从未见过它..
除了借助序列化和反序列化之外,这也可以存储几乎所有内容..
- 保存到数据库
这对于有点复杂的数据非常有用。而且我认为这不会被光盘清洁器清洗掉,因为它存储在 AppData(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 适用于较大的数据集。
在 Android 中,如果我有想要跨会话保留的信息,我知道我可以使用 SharedPreferences 或创建 SQLite 数据库,甚至可以将文件写入设备并稍后读取。
有没有办法只使用Flutter来保存和恢复这样的数据?或者我是否需要像 services example?
中那样为 Android 和 iOS 编写特定于设备的代码有几个选项:
- 读写文件:https://flutter.io/reading-writing-files/
- 通过 Flutter 插件的 SQLite:https://github.com/tekartik/sqflite
- 通过 Flutter 插件的 SQLCipher:https://github.com/drydart/flutter_sqlcipher
- SharedPreferences 通过 Flutter 插件:https://github.com/flutter/plugins/tree/master/packages/shared_preferences
- Localstore 通过 Flutter 插件:https://pub.dev/packages/localstore
您可以使用来自 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.
提供的可靠服务如果您只需要存储简单的值,例如 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
迟到的回答,但我希望它对以后访问这里的人也有帮助..
我会提供保存的类别和各自的最佳方法...
- 共享首选项 在存储上存储简单值时使用此选项,例如颜色主题、应用程序语言、上次滚动位置(在阅读应用程序中)。这些是您希望在应用程序重新启动时保留的简单设置。 但是,您可以使用它来存储大型内容(列表、地图、图像),但这需要序列化和反序列化。要了解有关此反序列化和序列化的更多信息,请转到here.
- 文件 当你有更多由你定义的数据时,这很有帮助,例如日志文件、图像文件,也许你想导出 csv 文件。我听说一旦磁盘用完 space..我不确定,因为我从未见过它.. 除了借助序列化和反序列化之外,这也可以存储几乎所有内容..
- 保存到数据库 这对于有点复杂的数据非常有用。而且我认为这不会被光盘清洁器清洗掉,因为它存储在 AppData(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