在 Android 中,如果我有想要在会话中保留的信息,我知道我可以使用 SharedPreferences 或创建 SQLite 数据库,甚至将文件写入设备并稍后读取。
有没有办法只使用 Flutter 来保存和恢复这样的数据?或者我是否需要像服务示例中那样为 Android 和 iOS 编写特定于设备的代码?
在 Android 中,如果我有想要在会话中保留的信息,我知道我可以使用 SharedPreferences 或创建 SQLite 数据库,甚至将文件写入设备并稍后读取。
有没有办法只使用 Flutter 来保存和恢复这样的数据?或者我是否需要像服务示例中那样为 Android 和 iOS 编写特定于设备的代码?
There are a few options:
如果您处于想要保存稍后想要参考的小值的情况。那么您应该使用 shared_preferences 将数据存储为键值数据
但是如果你想存储大数据,你应该使用 SQLITE
但是您始终可以使用可离线使用的 firebase 数据库
由于我们谈论的是本地存储,您始终可以在磁盘上读取和写入文件
其他解决方案:
一个迟到的答案,但我希望它对以后访问这里的人也有帮助..
我将提供要保存的类别及其各自的最佳方法...
您可以使用来自 Flutter 官方插件的 共享首选项。https://github.com/flutter/plugins/tree/master/packages/shared_preferences
它对 Android 使用 Shared Preferences,对 iOS 使用 NSUserDefaults。
如果您只需要存储简单的值,例如 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');
不要忘记shared_preferences
在 pubspec.yaml 中添加依赖项(保留间距格式):
dependencies:
shared_preferences: any
您可以使用本地存储
flutter pub add localstorage
1-添加依赖项pubspec.yaml
(根据最后一个更改版本)
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'];
}
从 localstorage 中删除一个项目:
void removeItemFromLocalStorage() {
storage.deleteItem('name');
storage.deleteItem('family');
storage.deleteItem('info');
}
我认为如果您要在本地存储中存储大量数据,您可以使用 sqflite 库。它很容易设置,我个人用于一些测试项目,效果很好。
https://github.com/tekartik/sqflite 这是一个教程 - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57
如果您想将数据存储在云中,您可以使用 firebase。这是谷歌提供的可靠服务。
我一直在寻找相同的、简单的本地存储,但也具有合理的安全级别。我发现最有意义的两个解决方案是flutter_secure_storage(如Raouf提到的)用于小数据,而hive用于更大的数据集。
您可以将SharedPreferences用于少量数据。但是如果你有大而复杂的数据,那么你应该在 Flutter 应用程序中使用Sqlite 数据库进行本地存储。