我有一個日程安排應用程式,我的屬性之一是 DateTime。我希望能夠通過用戶輸入以小時/分鐘為單位“推回”或“拉動”所有時間戳。我的問題是在嘗試使用我的 PushPull 方法時,它需要一個 DocumentSnapshot 實體,我不知道如何實體化它。
我有四個用于推/拉小時/分鐘的文本欄位,如下所示:
TextField( controller: pullHourController,
decoration: const InputDecoration(hintText: 'Hours'),
onChanged: (newValue) =>
pullHourController.setSelected(newValue),),
然后我將字串決議為整數,如:
late int pullHour = int.parse(pullHourController.text);
我的推拉方法放在一個按鈕上:
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但點擊它時沒有任何反應。
uj5u.com熱心網友回復:
沒有原子操作可以一次性更新所有檔案。由于您的新值取決于現有值,因此您需要:
閱讀集合中的所有檔案。
在您的應用程式代碼中逐一回圈它們。
計算每個檔案的新值,并將其寫回資料庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/446113.html
