[英]How do i get the single field value from querysnapshot in flutter firestore
[英]How can I send and receive two types of data from one single field in firestore for flutter?
我的 flutter 應用程序中有兩個文本字段。 我在第一個點擊時使用 showDatePicker,在第二個點擊時使用 showTimePicker(讓用戶選擇特定的日期和時間)。
我正在使用 class model 從一個變量發送和接收日期和時間:
DateTime? taskDate; // Time as well
我考慮過將它們分開發送,但看看當我將它們一起發送時 firebase 中會發生什么:
一個日期和時間分隔的時間戳字段(如地圖)。
我的問題是如何在 Firestore 中指向其中一個(日期或時間)以便我可以對它們執行一些操作?
例如,我想在 20203 年 1 月 13 日添加一個任務,我希望將其保存在日期字段中,將時間保存在時間字段中。 您在圖片中看到的不是選擇的日期和時間。
這是使用 model 和 bloc state 管理發送數據的代碼:
TaskModel? taskModel;
void addTask({
required String title,
required DateTime date,
}) {
emit(AddPostLoadingState());
taskModel = TaskModel(
taskTitle: title,
taskDate: date,
name: userModel!.name,
uid: userModel!.uId);
FirebaseFirestore.instance
.collection('tasks')
.add(taskModel!.toJson())
.then((value) {
getTask();
}).catchError((error) {
print(error);
emit(AddPostErrorState(error));
});
}
因為我知道日期時間在 firestore 中作為時間戳收到。我在獲取數據時在類型中更改了它:
void getTask() {
emit(GetTaskLoadingState());
FirebaseFirestore.instance
.collection('tasks')
.where('uid', isEqualTo: uId)
.orderBy('taskDate')
.get()
.then((value) {
tasks = []; // Global List<TaskModel>
for (var element in value.docs) {
data['taskDate'] = DateTime.fromMillisecondsSinceEpoch(
data['taskDate'].seconds * 1000);
tasks.add(TaskModel.fromJson(data));
}
emit(GetTaskSuccessState());
}).catchError((error) {
print(error.toString());
emit(GetTaskErrorState(error: error));
});
}
Firestore Timestamp
字段是一個包含日期和時間的原子值。 無法單獨設置字段的日期和時間,因為它作為單個值存儲在數據庫中。
如果您想在數據庫中單獨操作日期和時間,請考慮自己將它們存儲為單獨的字段(例如,在您已經描述的 map 中)。 然后,在讀取/寫入數據庫時,您需要在代碼中與DateTime
進行轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.