【问题标题】:Flutter - ReOrder Data Stored in FireStoreFlutter - 重新排序存储在 FireStore 中的数据
【发布时间】:2020-11-11 11:28:57
【问题描述】:

如您所见,我正在使用 Flutter 的 ReorderableListView 小部件拖动任务。

onReorder 可以上下拖动任务。但是,当我关闭应用程序时,所有任务都会按照默认顺序进行。

这是因为我从 CloudFireStore 获取的数据没有改变它的顺序,而是在我的拖动中更新的方式。

谁能帮帮我,我如何更新存储为 Cloud FireStore 中文档的任务位置,这样当我关闭应用程序并再次打开它时,它会显示新的更新位置而不是旧的任务位置

代码:

child: StreamBuilder(
                    stream: FirebaseFirestore.instance
                        .collection("Tasks")
                        .doc(_email)
                        .collection("User_Tasks_List")
                        .snapshots(),
                    builder: (context, snapshot) {
                      if (!snapshot.hasData) return const Text("Loading!...");
                      _docs = snapshot.data.documents;
                      return Theme(
                        data: ThemeData(canvasColor: Colors.transparent),
                        child: ReorderableListView(
                            children: _docs
                                .map((e) => InkWell(
                                    key: ObjectKey(e),
                                    onTap: () => _popupDialog(context, e),
                                    onDoubleTap: () => FirebaseFirestore
                                            .instance
                                            .runTransaction(
                                                (transaction) async {
                                          transaction.delete(e.reference);
                                          Fluttertoast.showToast(
                                              msg: "Task has been deleted!");
                                        }),
                                    child: ViewHolder(e)))
                                .toList(),
                            onReorder: onReorder),
                      );
                    }),

【问题讨论】:

    标签: flutter google-cloud-firestore reorderable-list


    【解决方案1】:

    您可以将index:x 之类的参数添加到firestore 中的项目。然后您需要保存有序列表项的顺序并使用索引将它们存储在 Firestore 中。

    当您获取项目时,您需要按此索引对它们进行排序,您将获得相同的顺序。

    objects.sort((a, b) => a.index.compareTo(b.index));
    

    【讨论】:

    • 所以我无法修改它在 Firestore 中的存储方式,无论需要对数据进行什么排序或排列,都必须在客户端完成。
    • @Trizin 的答案是正确的方法。尽管如此,如果您不想修改数据库上的订单(您应该这样做),您仍然可以在客户端persist data。一旦您的应用程序关闭,您应该将文档 ID 与其顺序一起存储,并在再次检索时自行重新排序。请记住,从另一个客户端检索相同信息时,排序将是保存在 Firestore 中的原始信息。
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2021-01-12
    • 2019-10-01
    • 1970-01-01
    • 2020-09-14
    • 2019-07-24
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多