我想让一个类从Dart中的另一个类继承一些属性.最好的方法是什么?

这是我的父类:

class Photo {
  final String id;
  final String owner, server, secret, title;
  final int farm, isfamily, ispublic, isfriend;
  final String url;

  Photo(
      {this.id,
      this.owner,
      this.secret,
      this.server,
      this.farm,
      this.title,
      this.ispublic,
      this.isfriend,
      this.isfamily,
      this.url});

  factory Photo.fromJson(Map<String, dynamic> parsedJson) {
    return new Photo(
        id: parsedJson['id'],
        owner: parsedJson['owner'],
        secret: parsedJson['secret'],
        server: parsedJson['server'],
        farm: parsedJson['farm'],
        title: parsedJson['title'],
        ispublic: parsedJson['ispublic'],
        isfriend: parsedJson['isfriend'],
        isfamily: parsedJson['isfamily'],
        url: parsedJson['url_m']);
  }
} 

这是我要创建的子类:

class gPhoto : Photo //inherits Photo
{
  string ownername; 
  string dateadded; 

  gPhoto(
          {this.ownername,
           this.dateadded
          });

  factory gPhoto.fromJson(Map<String, dynamic> parsedJson) {

        return new Photo(
        ownername: parsedJson['ownername'], 
        dateadded: parsedJson['dateadded'']);
}

这样行吗?Photo类中的工厂将与我的新类一起工作,还是我必须为gPhoto创建一个单独的类来映射json?

推荐答案

您需要判断DART语法,它与C#等使用:进行继承的语言略有不同.

这就是你自己做这件事的方式:

class Photo {
  final String id;
  final String owner, server, secret, title;
  final int farm, isfamily, ispublic, isfriend;
  final String url;

  Photo(
      {this.id,
      this.owner,
      this.secret,
      this.server,
      this.farm,
      this.title,
      this.ispublic,
      this.isfriend,
      this.isfamily,
      this.url});

  factory Photo.fromJson(Map<String, dynamic> parsedJson) {
    return new Photo(
        id: parsedJson['id'],
        owner: parsedJson['owner'],
        secret: parsedJson['secret'],
        server: parsedJson['server'],
        farm: parsedJson['farm'],
        title: parsedJson['title'],
        ispublic: parsedJson['ispublic'],
        isfriend: parsedJson['isfriend'],
        isfamily: parsedJson['isfamily'],
        url: parsedJson['url_m']);
  }
}

class gPhoto extends Photo {
  final String ownername;
  final String dateadded;

  gPhoto(
      {id,
      owner,
      secret,
      server,
      farm,
      title,
      ispublic,
      isfriend,
      isfamily,
      url,
      this.ownername,
      this.dateadded})
      : super(
            id: id,
            owner: owner,
            secret: secret,
            server: server,
            farm: farm,
            title: title,
            ispublic: ispublic,
            isfamily: isfamily,
            url: url);

  factory gPhoto.fromJson(Map<String, dynamic> parsedJson) {
    final photo = Photo.fromJson(parsedJson);
    final ownername = parsedJson['ownername'];
    final dateadded = parsedJson['dateadded'];
    return gPhoto(
      dateadded: dateadded,
      ownername: ownername,
      farm: photo.farm,
      id: photo.id,
      isfamily: photo.isfamily,
      isfriend: photo.isfriend,
      ispublic: photo.ispublic,
      owner: photo.owner,
      secret: photo.secret,
      server: photo.server,
      title: photo.title,
      url: photo.url,
    );
  }
}

Dart相关问答推荐

Dart中使用set表达式的switch语句

dart nullsafey 和使用旧包

为什么 StatefulWidget 的路由创建失败?

禁用 ListView 滚动

AnimatedContainer 可以为其高度设置动画吗?

Dart / Flutter 错误:没有为类Logger定义toStringDeep

不要将 PageView 居中 - Flutter

更新复选框并从Flutter对话框中返回值

Flitter中的谷歌 map 没有出现

如何从 ExpansionTile 的标题中删除默认填充

Dart/Flutter 中的=>(箭头)是什么意思?

如何在dart中四舍五入?

'dart:async' 的函数 `runZoned` 的用途

什么时候在 Dart 中使用 num

Visual Studio 的 Dart 插件

将函数/方法分配给 Dart 中的变量

Dart 中的构造函数和初始化列表有什么区别?

Dart:异步抽象方法

如何使用 Dart 列出目录的内容?

有没有办法取消dartfuture ?