【发布时间】:2021-01-30 16:46:24
【问题描述】:
在我的应用程序中,我有一个用户添加项目的列表。 我希望能够将这些数据(列表)存储在本地的手机上,以便下次用户打开应用程序时可以显示该列表。 我该怎么做。
(该应用仅适用于安卓手机)
【问题讨论】:
-
如果数据很少,你可以使用共享偏好 如果有很多数据,我建议使用 sqllite@Tobias H.
标签: database flutter local-storage storage
在我的应用程序中,我有一个用户添加项目的列表。 我希望能够将这些数据(列表)存储在本地的手机上,以便下次用户打开应用程序时可以显示该列表。 我该怎么做。
(该应用仅适用于安卓手机)
【问题讨论】:
标签: database flutter local-storage storage
您可以使用 Shared Preferences 插件,这是一个简单的键值存储
这里是插件https://pub.dev/packages/shared_preferences/install的链接
这是一个示例,说明您如何存储项目列表以及如何加载它们:
class PersonData {
final String id;
final String name;
final String lastName;
PersonData({this.id, this.name, this.lastName});
}
void saveItems(List<PersonData> items) async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
List<String> personList = [];
items.forEach((element) {
personList.add("${element.id},${element.name},${element.lastName}");
});
sharedPreferences.setStringList("personData", personList);
}
Future<List<PersonData>> loadItems() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
List<String> personList = sharedPreferences.getStringList("personData");
List<PersonData> items = [];
personList.forEach((element) {
List<String> personData = element.split(",");
PersonData person = PersonData(
id: personData[0], name: personData[1], lastName: personData[2]);
items.add(person);
});
return items;
}
【讨论】:
您可以使用不同的方法,
Shared Preferences - 将数据保存到本地缓存中。
为简单数据包装特定于平台的持久存储(iOS 和 macOS 上的 NSUserDefaults,Android 上的 SharedPreferences 等)。数据可能会异步持久化到磁盘,并且不能保证写入返回后会持久化到磁盘,所以这个插件不能用于存储关键数据。
Sqflite - 使用 SQLite 本地数据库。
Flutter 的 SQLite 插件。支持 iOS、Android 和 MacOS。 支持事务和批处理 打开期间的自动版本管理 插入/查询/更新/删除查询的助手 在 iOS 和 Android 上的后台线程中执行的 DB 操作
如果是小应用,我建议使用Hive
Hive 是一个用纯 Dart 编写的轻量级且超快的键值对数据库
这是一个使用 Hive 的示例。
var box = Hive.box('myBox');
box.put('name', 'David');
var name = box.get('name');
print('Name: $name');
当然有很多包使用不同的方式来存储数据,你可以搜索更适合你使用的那个。
【讨论】: