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
相关产品推荐
相关产品推荐

