Flutter序列化失败,并出现NoSuchMethodError:在null上调用了方法'toIso8601String'

时间:2019-10-27 18:34:52

标签: flutter dart

我的模型中有一个DateTime字段,其值为空。我正在使用json_serializable库来处理序列化/反序列化。序列化具有空值的dattime字段时失败。

@JsonSerializable(nullable: false, includeIfNull: false)
class Customer{
  DateTime eventTime; //Field with null value
  //others
  factory Customer.fromJson(Map<String, dynamic> json) => _$CustomerFromJson(json);
  Map<String, dynamic> toJson() => _$CustomerToJson(this);

}

例外:

 9-10-27 11:28:47.724 31431-31463/E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: NoSuchMethodError: The method 'toIso8601String' was called on null.
        Receiver: null
        Tried calling: toIso8601String()
        #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
        #1      _$CustomerToJson (/models/customer.g.dart:74:41)

1 个答案:

答案 0 :(得分:1)

如果值可以为null,则需要使用可为null的属性

@JsonKey(nullable: false)
DateTime eventTime;
  

可空属性

     

如果为true,则在对JSON进行编码以及从JSON解码null和不存在的值时,可以很好地处理null字段。

     

设置为false可以消除为带注释的字段生成的代码中的空验证,从而减小了代码大小。如果遇到null值,则可能在运行时引发错误,但是如果原始类很关键,则原始类也应该实现null运行时验证。

     

默认值null,指示应从封闭类的JsonSerializable.nullable批注中获取行为。