flutter - 如何有效地保存和检索后端数据库中元素的位置?
问题描述
我正在flutter和sqflite中实现一个简单的待办事项应用程序作为DB(sql)。我已经使用ReorderableListView实现了 listView (即:元素可以垂直拖动),我想在拖动时将位置保存在 DB 中。我已经使用它在某个索引之后更改数据库中的每个元素,但它效率不高,因为如果有数千个待办事项,那么更新数据库中大多数待办事项的位置效率不高,而且如果使用任何类型的后端(即:火力基地)。有没有办法有效地实施它?谢谢。
我的代码:
Future<void> updateMultiple(List<Todo> rows, int start) async {
Database db = await instance.database;
final batch = db.batch();
for (int i = start; i < rows.length; i++) {
final td = rows[i];
td.setIndex(i);
batch.update(table, td.toMap(),
where: '_id = ?', whereArgs: [rows[i].id]);
}
await batch.commit(noResult: true);
}
注意:每次拖动时都会调用上述方法。
解决方案
由于您正在访问磁盘,因此连续调用数据库并不是执行这些活动的最佳模式。如果您使用远程数据库,情况会变得更糟。为了保持更新足够快,最好的选择是使用本地状态更新数据,然后仅在特定情况下更新数据库(小部件已处理,应用程序生命周期更改等)
推荐阅读
- java - 登录后可以存储和使用@AuthenticatedPrincipal
- python - 无法在 AWS 上的 lambda 函数中运行 pytest 命令
- jquery - 刷新类中的所有 div
- c# - AspectFill 在最初加载图像时适用于 Xamarin Mac 中的 CachedImage 渲染器,但在更新值时不起作用
- r - 根据价值计数计算中位数
- java - How to add click/long click listener to ViewPager2
- javascript - Add matching values from one array to an array of original object
- javascript - 删除数组中特定数量的元素
- python - Pyaudio detecting Microphone but not reviving audio
- cgo - Having trouble with a Makefile. How can I get a more verbose error?