flutter - 使用时间戳字段创建文档时,流式传输集合会出错
问题描述
在构建 StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(dirty, state: _StreamBuilderBaseState<QuerySnapshot<Map<String, dynamic>>, AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>>>#f407c 时引发了以下 NoSuchMethodError ): 方法 'toDate' 在 null 上被调用。接收方:null 尝试调用:toDate()
在按下 FAB 时,将创建一个带有 firebase 时间戳字段的文档。
现在在流式传输集合。我在一瞬间收到此错误。我认为问题是..是先创建文档,然后再使用时间戳进行更新。在创建文档的实例中导致错误。
class XYZ extends StatelessWidget {
const XYZ({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
FirebaseFirestore.instance.collection('Test').add({'time': FieldValue.serverTimestamp()});
},
),
body: StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
stream: FirebaseFirestore.instance.collection('Test').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) return Center();
snapshot.data!.docs.forEach((doc) {
print(doc.data()['time'].toDate());
});
return Container();
},
),
),
);
}
}
这是firestore的行为吗?或者我在我的代码中做了错误的实现?
解决方案
首先,您的错误是toDate()
在投射“TimeStamp”类之前使用。
请尝试以下几行;
snapshot.data!.docs.forEach((doc) {
final timestamp = doc.data()['time'] as Timestamp;
final dateTime = timestamp.toDate();
print('Date: ${dateTime}');
});
推荐阅读
- javascript - 使用变换 api 的 3d 幻觉效果
- docker - Rabbitmq - 端口 5672 上的 Docker 连接被拒绝
- java - 在给定的数组段中查找最小数
- php - php数组进入更新sql
- javascript - 用于重用函数接口的 JSDoc
- python - 在 Amazon ElasticBean Stalk 上运行 Flask 应用程序时出错
- android - 使用警报管理器设置多个警报
- docker - 导入后无法运行 docker gitlab 容器
- r - 使用 ggplot2 为组自定义颜色
- java - 导航按钮在java netbeans中不起作用