未处理的异常:NoSuchMethodError:方法“ toDate”在null上调用

时间:2019-03-04 14:31:00

标签: dart flutter google-cloud-firestore

我正在使用 Firebase 开发聊天应用程序。

一段时间后我收到此错误 Unhandled Exception: NoSuchMethodError: The method 'toDate' was called on null.

使用TimestampDateTime转换为toDate()时出错。

一段时间内出现错误,然后错误消失。

请考虑此GIF

THIS

此处是FIRSTORE数据类型AS TimeStamp

enter image description here

源代码

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
  }
}

感谢。

2 个答案:

答案 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()保存在变量中。希望对我有用,