У меня есть приложение для планирования, и одним из моих свойств является DateTime. Я хочу иметь возможность «отталкивать» или «передвигать вперед» все временные метки в часах/минутах с помощью пользовательского ввода. Моя проблема заключается в том, что при попытке использовать мой метод PushPull требуется экземпляр DocumentSnapshot, который я не знаю, как создать экземпляр.
У меня есть четыре текстовых поля для выталкивания/вытягивания часов/минут, которые выглядят так:
TextField( controller: pullHourController,
decoration: const InputDecoration(hintText: 'Hours'),
onChanged: (newValue) =>
pullHourController.setSelected(newValue),),
Затем я разбираю строку на целые числа, например:
late int pullHour = int.parse(pullHourController.text);
и мой метод pushpull, который я надел на кнопку:
CollectionReference products =
FirebaseFirestore.instance.collection('products');
Future pushPull(DocumentSnapshot documentSnapshot) async {
Timestamp timestamp = await documentSnapshot.get('Start Time');
late DateTime d = timestamp.toDate();
late DateTime added = DateTime(d.year, d.month, d.day,
d.hour - pullHour + pushHour, d.minute - pullMinute + pushMinute);
await products.doc().set({'Start Time': added}).catchError((error) =>
{Get.snackbar("Failed to change time: $error", 'Please try again.')});
throw (e) => Get.snackbar('Error', (e).toString());
}
Однако, когда я пытаюсь использовать это в своем onPressed, мне нужен documentSnapshot в качестве позиционного аргумента, но он недоступен локально:
onPressed: () async {
pushPull();
},
Я пытался избавиться от скобок типа pushPull
, но ничего не происходит при нажатии.
@FrankvanPuffelen Привет, я пытаюсь обновить все документы в коллекции «продукты». Все они содержат поле «время начала».
Не существует атомарной операции для обновления всех документов за один раз. Поскольку ваше новое значение зависит от существующего значения, вам необходимо:
Прочитать все документы из коллекции.
Прокручивайте их один за другим в коде вашего приложения.
Вычислите новое значение для каждого документа и запишите его обратно в базу данных.
Определенно не ожидал, что облачный сотрудник поможет мне с моим первым вопросом. Вы только что спасли меня от еще 8 часов головной боли, спасибо!
Поскольку вы хотите обновить существующий документ, вам необходимо знать идентификатор документа, который вы хотите обновить. Вы это знаете? Можете ли вы показать это в коде в вашем вопросе?