Каков рекомендуемый способ применения операций CRUD к документу в Cloud Firestore с использованием Flutter? - PullRequest
0 голосов
/ 08 ноября 2018

Я собираюсь перенести большое приложение, написанное на Xamarin, и перейти на Flutter с Cloud Firestore в качестве бэкэнда. Поскольку Cloud Firestore все еще находится на стадии бета-тестирования, кажется, очень мало конкретных примеров , демонстрирующих лучшие практики при вызове из клиента Flutter.

В частности - кажется, что нет прямого подхода к проверке того, провалился ли TX или успешно ли он.

Итак, взяв в качестве примера стандартную операцию ' Удалить ' - каков наилучший подход к выполнению ваших собственных транзакций как в онлайн, так и в автономном режиме, включая обеспечение надлежащей обработки ошибок во Flutter?

Я расширил свое решение ниже (в методе удаления) , и вы можете видеть, что выполняются два сетевых вызова, один для получения ссылки на последний документ, а другой для выполнения удаления.

Однако, поскольку мы используем StreamBuilder, который получает обновления при изменении каких-либо документов, не можем ли мы предположить, что widget.documents [index] .reference будет содержать ссылку на последний документ и, следовательно, покончить с :

var snapshot=await tx.get(docReference)
if (snapshot.exists){
    await tx.delete(snapshot.reference)
}

и просто используйте:

   var docReference = widget.documents[index].reference;
   await tx.delete(docReference);

Примечание

Оба вышеприведенных подхода работают - я придерживаюсь подхода, который на 100% соответствует тесту ACID в отношении транзакций, а также обеспечивает наилучшую производительность.

Пример использования

Подписка Streambuilder:

Streambuilder subscription

В FirestoreListView создается ListView.Builder, который добавляет кнопку удаления / редактирования, которая позволяет удалять или добавлять любой элемент, таким образом, мы имеем что-то вроде этого:

ListView:

Listview

За кнопкой удаления мы выполняем удаление как:

Удалить код:

Delete code

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...