在 dart 中使用 fromJson 进行扩展

2024-03-24

我在 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 的角度来思考这个问题,但惨败了……知道如何实现这一目标的最佳方法吗?

Thanks!


我认为以下内容应该可以解决您的问题:

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构造函数的文档 https://www.dartlang.org/guides/language/language-tour#constructors澄清这个话题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 dart 中使用 fromJson 进行扩展 的相关文章

随机推荐