首页 > 解决方案 > 将 DateTime 序列化为时间戳以用于 Firestore 颤动

问题描述

我有一个模型课

import 'package:cloud_firestore/cloud_firestore.dart';

class Available{
 String uid;
 DateTime date;
 int stock;
 bool isAvailable;

 Available({this.date,this.uid,this.stock,this.isAvailable});


  Available.fromJson(Map<String, dynamic> json)
       : uid = json['UID'],
       date = DateTime.parse(json['date'].toDate().toString()),
     stock = json['stock'],
    isAvailable = json["isAvailable"];

 Map<String, dynamic> toJson() {
   return {
    'UID': uid,
    'date': date,
    'stock': stock,
    'isAvailable': isAvailable,
   };
 }
}

我有一个可用对象的列表,当我尝试将列表编码为 json 并将其存储到 firestore 时,由于DateTime对象,我似乎无法做到这一点

注意:我正在更新整个列表,如下所示:

var json = jsonEncode(value.map((e) => e.toJson()).toList(),toEncodable: myDateSerializer);

    FirebaseFirestore.instance.collection("Availability").doc(element.pid).update({
      "dates":jsonDecode(json)
    });

但我需要将每个对象的所有日期存储为 firestore 时间戳,因此使用 date.toIso8601String() 或 date.microsecondsSinceEpoch 将不起作用,因为它不会是 firestore 时间戳格式。

标签: flutterdatetimegoogle-cloud-firestore

解决方案


至少使用 Firebase,您可以直接存储 DateTime 对象。

我认为您的更新使 json 标记加倍。只需通过更新日期即可:update({"dates":myDate


推荐阅读