簡體   English   中英

如何從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM