问题描述
我正在开发一个用于学习目的的列表应用。我想使用 ReorderableListView 小部件使列表可重新排序。
一切正常,但我无法让列表与 firebase/firestore 一起使用。每次我重新订购商品时,它都会损坏。
我的问题是,我无法正确更新 firestore 中的项目位置。这些项目有一个 'pos' 字段,用于确定它们在列表中的位置。
列表在 StreamBuilder 小部件中构建,然后在更改时调用“roerderItems”。
这里是重新排序功能:
void reorderItem(int oldIndex,int newIndex) async {
QuerySnapshot itemSnap = await itemCollection.getDocuments();
for (int i = 0; i < itemSnap.documents.length; i++) {
if (i == newIndex) {
itemSnap.documents[oldIndex].reference.updateData({"pos": i});
continue;
} else if (i == oldIndex) {
continue;
} else {
itemSnap.documents[i].reference.updateData({"pos": i});
}
}
// print(itemName);
// print('old: $oldIndex,new: $newIndex');
// for (int i = 0; i < itemSnap.documents.length; i++) {
// if (i < oldIndex && i >= newIndex) {
// print('1. i: $i,newInd: $newIndex');
// itemSnap.documents[i].reference
// .updateData({'pos': itemSnap.documents[i].data['pos'] + 1});
// } else if (i >= oldIndex && i < newIndex) {
// print('2. i: $i,newInd: $newIndex');
// itemSnap.documents[i].reference
// .updateData({'pos': itemSnap.documents[i].data['pos'] - 1});
// }
// if (oldIndex > newIndex) {
// if (i >= newIndex) {
// print('i: $i,newInd: $newIndex');
// itemSnap.documents[i].reference
// .updateData({'pos': itemSnap.documents[i].data['pos'] + 1});
// }
// } else {
// if (i >= oldIndex) {
// print('i: $i,newInd: $newIndex');
// itemSnap.documents[i].reference
// .updateData({'pos': itemSnap.documents[i].data['pos'] - 1});
// }
// }
// }
// itemCollection.document(itemName).updateData({'pos': newIndex});
// itemSnap.documents.forEach((doc1) {
// if (doc1.documentID != itemName && oldIndex < newIndex) {
// if (doc1.data['pos'] <= newIndex) {
// doc1.reference.updateData(
// {'pos': (doc1.data['pos'] - 1) < 0 ? 0 : doc1.data['pos'] - 1});
// }
// } else if (doc1.documentID != itemName && oldIndex > newIndex) {
// if (doc1.data['pos'] >= newIndex) {
// doc1.reference.updateData({'pos': doc1.data['pos'] + 1});
// }
// }
// });
}
顶部未注释掉的部分是我当前的尝试,但失败了。它不断在 firebase 中创建重复的“pos”条目,导致它崩溃。有没有办法可靠地做到这一点?
被注释掉的部分是以前的尝试,但没有成功,我现在尝试了几个小时。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)