首页 > 解决方案 > 如何有效地保存和检索后端数据库中元素的位置?

问题描述

我正在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);
}

注意:每次拖动时都会调用上述方法。

在此处输入图像描述

标签: flutterbackendsqflite

解决方案


由于您正在访问磁盘,因此连续调用数据库并不是执行这些活动的最佳模式。如果您使用远程数据库,情况会变得更糟。为了保持更新足够快,最好的选择是使用本地状态更新数据,然后仅在特定情况下更新数据库(小部件已处理,应用程序生命周期更改等)


推荐阅读