在Android中如果我有信息我希望跨会话持续存在,我知道我可以使用SharedPreferences或创建SQLite数据库,甚至可以将文件写入设备并在以后阅读。
有没有办法只使用Flutter保存和恢复这样的数据?或者我是否需要像services example?
那样为Android和iOS编写特定于设备的代码答案 0 :(得分:74)
有几个选择:
答案 1 :(得分:30)
如果你想要保存一个你想稍后提到的小值的情况。那么你应该使用shared_preferences
将你的数据存储为键值数据但如果你想存储大数据,你应该使用SQLITE
但是,您始终可以使用可离线使用的firebase数据库
由于我们讨论的是本地存储,您始终可以读取和写入磁盘文件
其他解决方案:
答案 2 :(得分:10)
您可以使用flutter官方插件中的共享偏好。 https://github.com/flutter/plugins/tree/master/packages/shared_preferences
它使用Android的共享首选项,适用于iOS的NSUserDefaults。
答案 3 :(得分:8)
一个较晚的答案,但我希望它也会对以后访问此地的人有所帮助?..
我将提供要保存的类别及其各自的最佳方法...
答案 4 :(得分:2)
如果您只需要存储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
答案 5 :(得分:1)
答案 6 :(得分:1)
您可以使用 Localstorage
1-为pubspec.yaml
(Change the version based on the last)添加依赖项
dependencies:
...
localstorage: ^3.0.0
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');
}
答案 7 :(得分:0)
我认为,如果要在本地存储中存储大量数据,则可以使用sqflite库。设置非常容易,我亲自使用过一些测试项目,效果很好。
https://github.com/tekartik/sqflite 本教程-https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57
如果要将数据存储在云中,则可以使用firebase。这是Google提供的可靠服务。
答案 8 :(得分:0)
答案 9 :(得分:0)
您可以使用SharedPreferences处理少量数据。但是,如果您有庞大而复杂的数据,则应使用Sqlite Database在Flutter应用程序中进行本地存储。
答案 10 :(得分:0)
我一直在寻找相同,简单的本地存储,但又具有合理的安全级别。我发现最有意义的两个解决方案是:flutter_secure_storage(如Raouf所述)用于小型数据集,hive用于大型数据集。