Flutter — изменение порядка данных, хранящихся в FireStore

#flutter #google-cloud-firestore #reorderable-list

#flutter #google-облако-firestore #переупорядочиваемый список

Вопрос:

введите описание изображения здесь

Как вы можете видеть, я перетаскиваю задачи с помощью виджета ReorderableListView от Flutter.

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),
                      );
                    }),
  

Ответ №1:

Вы можете добавить параметр, подобный index:x элементам в firestore. Затем вам нужно сохранить порядок упорядоченных элементов списка и сохранить их в Firestore с использованием индексов.

Когда вы извлекаете элементы, вам нужно отсортировать их по этому индексу, и вы получите тот же порядок.

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

Комментарии:

1. Поэтому я не могу изменить способ их хранения в firestore, независимо от того, какую сортировку или расположение данных необходимо выполнить, это должно выполняться на стороне клиента.

2. ответ @Trizin — это правильный подход. Тем не менее, если вы не хотите изменять порядок в базе данных (что вам следует), вы все равно можете сохранить данные на стороне клиента. После закрытия вашего приложения вы должны сохранить идентификаторы документов в соответствии с их порядком, а при повторном извлечении изменить порядок самостоятельно. Имейте в виду, что при получении той же информации от другого клиента порядок будет оригинальным, сохраненным в Firestore.