我正在使用 Firebase 开发聊天应用程序。
一段时间后我收到此错误 Unhandled Exception: NoSuchMethodError: The method 'toDate' was called on null.
使用Timestamp
将DateTime
转换为toDate()
时出错。
一段时间内出现错误,然后错误消失。
请考虑此GIF 。
此处是FIRSTORE数据类型AS TimeStamp
。
源代码
class ChatMessageModel {
bool isSentByMe;
String msg = '';
///SERVER TIME
Timestamp time;
DateTime localTime;
String timeStamp;
String fromUid;
String toUid;
ChatMessageModel._();
ChatMessageModel.fromSnapshot(DocumentSnapshot snapshot) {
this.isSentByMe =
snapshot.data['from'] == LoginBloc.instance.firebaseUser.uid;
this.msg = snapshot.data['msg'];
this.timeStamp = snapshot.data['time'].toString();
this.time = snapshot.data['time'];
this.fromUid = snapshot.data['from'];
this.toUid = snapshot.data['to'];
this.localTime = this.time.toDate(); //ERROR
}
}
感谢。
答案 0 :(得分:0)
您的代码正试图在将time
转换为Date
之前,一个简短的解决方法是在服务器值加载之前用当前时间初始化time
变量:
Timestamp time = new Timestamp( new Date(2019,3,4) );
另一种解决方案是在转换值之前使用async
方法从服务器上获取await
的值,鉴于您想在即时消息中使用它,因此您负担不起。可以在官方的Firebase documentation和android开发人员documentation中找到。
请注意,上面的代码将导致Timestamp
指向午夜,但这不是问题,因为与Firebase响应速度相比,它是一个简短的占位符。
答案 1 :(得分:0)
尝试更改
this.localTime = this.time.toDate();
到
this.localTime = this.time.toDate()==null?DateTime().now():this.time.toDate();
为了提高可读性,将this.time.toDate()
保存在变量中。希望对我有用,