在Dart中使用fromJson扩展

时间:2018-10-06 07:48:39

标签: dart

我在dart中有一个Identity类,看起来像这样(简化)

class Identity {
  final String phoneNumber;

  Identity({@required this.phoneNumber});

  Identity.fromJson(Map<String, dynamic> json)
      : phoneNumber = json['phoneNumber'];

}

我将使用此类将HTTP POST发送到我的身份服务;该服务将返回一个我想映射到ActiveIdentity的json,它看起来像这样(也简化了)。

class ActiveIdentity extends Identity {
  final String id;

  ActiveIdentity.fromJson(Map<String, dynamic> json)
          : id = json['id'];
}

现在,有没有一种方法可以在Identity中扩展或调用fromJson,以便我可以“扩展”此方法?理想情况下,在ActiveIdentity中从fromJson调用时,我应该收到一个新的ActiveIdentity实例,该实例的所有属性均已初始化(phoneNumber和id),但是在ActiveIdentity上,我只想处理id。

我也尝试过用mixin来考虑这个问题,但不幸的是失败了……关于实现此目标的最佳方法的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为以下方法可以解决您的问题:

class Identity {
  final String phoneNumber;

  Identity({@required this.phoneNumber});

  Identity.fromJson(Map<String, dynamic> json)
      : phoneNumber = json['phoneNumber'];
}

class ActiveIdentity extends Identity {
  final String id;

  ActiveIdentity.fromJson(Map<String, dynamic> json)
      : id = json['id'],
        super.fromJson(json) {
    print('$phoneNumber $id');
  }
}

尝试查看Dart documentation of constructors,以澄清该主题。