如何在 flutter 中将服务器时间戳添加到 firestore 文档?
How to add server timestamp to firestore document in flutter?
我是 Firestore 的新手。当我尝试通过函数 addSubject 中的 add 方法添加文档时,它抛出错误“预期类型 'String' 的值,但得到类型 'FieldValue' 之一”。当我将字段设置为 DateTime.now() 时,我遇到了类似的错误。如何将服务器时间戳添加到文档中?
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
Future<bool> addSubject(FirebaseFirestore x, FirebaseAuth auth, String subjectName) async{
try {
var doc = { "subject": subjectName };
await x.collection('subjects').add(appendCreateAudit(doc, auth));
} catch (e) {
print(e);
return false;
}
return true;
}
Map<String, dynamic> appendCreateAudit(Map<String, dynamic> x, FirebaseAuth auth) {
x["createdAt"] = FieldValue.serverTimestamp();
x["createdBy"] = auth.currentUser!;
x["updatedAt"] = FieldValue.serverTimestamp();
x["updatedBy"] = auth.currentUser!;
print(x);
return x;
}
Map<String, dynamic> appendUpdateAudit(Map<String, dynamic> x, FirebaseAuth auth) {
x["updatedBy"] = auth.currentUser!;
x["updatedAt"] = FieldValue.serverTimestamp();
return x;
}
可以将时间戳作为字符串发送,但这不是最佳解决方案。
- 有什么方法可以在 firestore 中存储时间戳变量,而无需先将其转换为字符串?
- 我试图通过传递 FieldValue.serverTimestamp() 来指示服务器在字段上放置时间戳。可以通过flutter实现吗?
参考问题
您发送的值不是 String
类型。只需在发送前将其转换为 toString()
即可修复错误。
示例:
FieldValue.serverTimestamp().toString();
或者只是:
"${FieldValue.serverTimestamp()}";
此行抛出错误
x["createdAt"] = FieldValue.serverTimestamp();
原因:我将 doc 声明为 var
var doc = { "subject": subjectName };
Dart 将 doc 解释为 Map 而不是 Map ,因此出现错误。
修复:
Map doc = { "subject": subjectName };
现在工作正常。
我是 Firestore 的新手。当我尝试通过函数 addSubject 中的 add 方法添加文档时,它抛出错误“预期类型 'String' 的值,但得到类型 'FieldValue' 之一”。当我将字段设置为 DateTime.now() 时,我遇到了类似的错误。如何将服务器时间戳添加到文档中?
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
Future<bool> addSubject(FirebaseFirestore x, FirebaseAuth auth, String subjectName) async{
try {
var doc = { "subject": subjectName };
await x.collection('subjects').add(appendCreateAudit(doc, auth));
} catch (e) {
print(e);
return false;
}
return true;
}
Map<String, dynamic> appendCreateAudit(Map<String, dynamic> x, FirebaseAuth auth) {
x["createdAt"] = FieldValue.serverTimestamp();
x["createdBy"] = auth.currentUser!;
x["updatedAt"] = FieldValue.serverTimestamp();
x["updatedBy"] = auth.currentUser!;
print(x);
return x;
}
Map<String, dynamic> appendUpdateAudit(Map<String, dynamic> x, FirebaseAuth auth) {
x["updatedBy"] = auth.currentUser!;
x["updatedAt"] = FieldValue.serverTimestamp();
return x;
}
可以将时间戳作为字符串发送,但这不是最佳解决方案。
- 有什么方法可以在 firestore 中存储时间戳变量,而无需先将其转换为字符串?
- 我试图通过传递 FieldValue.serverTimestamp() 来指示服务器在字段上放置时间戳。可以通过flutter实现吗?
参考问题
您发送的值不是 String
类型。只需在发送前将其转换为 toString()
即可修复错误。
示例:
FieldValue.serverTimestamp().toString();
或者只是:
"${FieldValue.serverTimestamp()}";
此行抛出错误
x["createdAt"] = FieldValue.serverTimestamp();
原因:我将 doc 声明为 var
var doc = { "subject": subjectName };
Dart 将 doc 解释为 Map
修复:
Map