如何更新 Firestore 中的 ReorderableListView 位置?

问题描述

我正在开发一个用于学习目的的列表应用。我想使用 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 (将#修改为@)