将 DateTime 序列化为时间戳以用于 Firestore 颤动
Posted
技术标签:
【中文标题】将 DateTime 序列化为时间戳以用于 Firestore 颤动【英文标题】:Serializing DateTime to Timestamp for firestore flutter 【发布时间】:2021-05-01 00:54:29 【问题描述】:我有一个模型类
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 时间戳格式。
【问题讨论】:
【参考方案1】:至少使用 Firebase,您可以直接存储 DateTime 对象。
我认为您的更新会使 json 标记加倍。只需通过更新日期:update("dates":myDate
【讨论】:
"dates" 是一个对象数组,json 是一个对象列表,每个对象都有多个数据项,其中数据是一个日期时间变量 一条错误消息和您的 toJson 可能会有所帮助。这就是我是一个包含 DateTime 变量的对象的方式:final taskJsonList = tasks.map((t) => t.toEntity().toMap()).toList();
。我猜,t.toEntity().toMap()
是你的toJson()
,它会创建一个包含"changeDate": changeDate
之类的地图以上是关于将 DateTime 序列化为时间戳以用于 Firestore 颤动的主要内容,如果未能解决你的问题,请参考以下文章