#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.