You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

StreamBuilder中出现'Timestamp'与'String'类型不匹配错误的解决求助

StreamBuilder中出现'Timestamp'与'String'类型不匹配错误的解决求助

各位好,我毫无预兆地在使用StreamBuilder时碰到了一个类型不匹配的错误,折腾了半天没搞定,想请教下大家该怎么解决这个问题!

错误详情:

Exception caught by widgets library

type 'Timestamp' is not a subtype of type 'String'

The relevant error-causing widget was
StreamBuilder<QuerySnapshot<Object?>>

相关代码片段:

// StreamBuilder部分
return StreamBuilder<QuerySnapshot>(
  stream: messages.orderBy('createdAt', descending: true).snapshots(),
  builder: ((context, snapshot) {
    String? data;
    if (snapshot.hasData) {
      print('=== data ===: ${snapshot.data}');
      List<Messages> listOfMessages = [];
      for (int i = 0; i < snapshot.data!.docs.length; i++) {
        // 这里是解析数据的关键部分
        listOfMessages.add(Messages.fromJson(snapshot.data!.docs[i]));
      }
      // 原代码里的child:应该是笔误,改成return返回ListView
      return ListView.builder(
        reverse: true,
        controller: scollcontroller,
        itemCount: listOfMessages.length,
        itemBuilder: (context, index) {
          return listOfMessages[index].id == email
              ? ChatBubble(message: listOfMessages[index])
              : ChatBubbleV2(message: listOfMessages[index]);
        },
      );
    }
    // 补充snapshot无数据时的默认返回
    return const CircularProgressIndicator();
  }),
);

// 发送消息的回调部分(TextField的onSubmitted)
onSubmitted: (data) {
  print('=== data ===: ${snapshot.data}');
  messages.add({
    'message': data,
    'createdAt': DateTime.now(),
    'id': email
  });
  controller.clear();
  scollcontroller.animateTo(0,
      duration: const Duration(milliseconds: 200),
      curve: Curves.easeIn);
},

我的初步推测:

我怀疑问题出在createdAt字段的类型处理上——发送消息时我存的是DateTime.now(),但从Firebase读取时这个字段会被转换成Timestamp类型,而我的Messages模型类里可能把createdAt定义成了String类型,导致解析时出现类型不匹配?不过具体该怎么调整模型类或者解析逻辑,我还没摸清楚,希望有经验的朋友能给点思路!

备注:内容来源于stack exchange,提问作者3MOR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:05:31