Дарт, Не могу вызвать метод Дженерика - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь создать абстрактную модель данных, в которой я передаю данные и набираю a, а затем возвращаю список, но когда я не могу вызвать метод T.fromJson(), обратите внимание, что тип передачи имеет метод fromJson()

class DataList<T> {
  final bool success; 
  dynamic data;


  InfosResponse({
    this.success,
    List<dynamic> data,   
  }) {
    castDataToList(data);
  }

  factory DataList.fromJson(Map<String, dynamic> json) {
    return DataList(
      success: json['success'],
      data: json['data'],
    );
  }

  void castDataToList(jsonData) {
    this.data = List<T>.from(jsonData.map((x) => T.fromJson(x)));
  }
}

1 Ответ

0 голосов
/ 19 ноября 2018

Вы не можете вызывать статические методы для переменных типа.Статические методы должны быть известны во время компиляции, а значение переменной типа не известно до времени выполнения.

Вы можете параметризовать свой класс с помощью метода, который вы хотите вызвать:

class DataList<T> {
  final bool success; 
  dynamic data;
  T dynamic Function(Object) fromJson;

  DataList({
    this.success,
    List<dynamic> data,   
    this.fromJson;
  }) {
    castDataToList(data);
  }

  factory DataList.fromJson(Map<String, dynamic> json, T fromJson(Object o)) {
     return DataList(
        success: json['success'],
        data: json['data'],
        fromJson: fromJson,
    );
  }

  void castDataToList(jsonData) {
    this.data = List<T>.from(jsonData.map((x) => fromJson(x)));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...