1

我有一个 api,它返回一个类型的实体,Category它具有以下实现:

class Category {
  final int id;
  final String title;

  Category({this.id, this.title});

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

我正在实现fromJson将结果映射到此类的对象的函数。


但是,the result can contain some metadata实际结果被封装到“内容”字段中。实现将是这样的:

class CategoryWrapper {
  List<Category> content;
  int currentPage;
  int totalItems;
  int totalPages;

  CategoryWrapper({this.content, this.currentPage, this.totalItems, this.totalPages});

  factory CategoryWrapper.fromJson(Map<String, dynamic> json) {
    var list = json['content'] as List;
    List<Category> objectList = list.map((i) => Category.fromJson(i)).toList();

    return CategoryWrapper(content: objectList, currentPage: json['currentPage'], totalItems: json['totalItems'], totalPages: json['totalPages']);
  }
}

fromJson也在此处实现该功能,以将结果映射到此类的对象中。


What I needgeneric class就像我在 Java 中一样,拥有一个可以采用任何实体(例如类别)的方法。该类看起来与此类似:

class Wrapper<T> {
  List<T> content;
  int currentPage;
  int totalItems;
  int totalPages;

  Wrapper({this.content, this.currentPage, this.totalItems, this.totalPages});

  factory Wrapper.fromJson(Map<String, dynamic> json) {
    var list = json['content'] as List;
    List<T> objectList = list.map((i) => T.fromJson(i)).toList(); // this won't work

    return Wrapper(content: objectList, currentPage: json['currentPage'], totalItems: json['totalItems'], totalPages: json['totalPages']);
  }
}

但这不起作用,因为我不能从泛型类型调用 f​​romJson 函数。


有没有一种解决方法我可以使用而不会使每个实体有两个不同的类复杂化?

4

0 回答 0