@blajlhimik

Как вызвать метод из generic в dart?

вот код, я мучался и нашел что в java можно так сделать, хотелось бы без рефлексий:

abstract class Model {
    List<String> getFields();
}

class Data extends Model {
    int field1
    int field2
    Data({required this.filed1, required this.filed2})

    List<String> getFields() {
        return ["field1", "field2"];
    }
}

class Table<T extends Model> {
  final List<T> dataList;
  late List<String> fieldList;
  Exec({required this.dataList}) {
    if (dataList.isEmpty) {
      fieldList = T.getFields(); // тут не работает, я пробовал разное: static функцию, из Model вызывать, создавать именованый конструктор который создает пустой клас... 
    } else {
      fieldList = fieldList.first.getFields();
    }
  }
}

// и так пробовал

class Table {
  final List<Model> dataList;
  late List<String> fieldList;
  Exec({required this.dataList}) {
    if (dataList.isEmpty) {
      fieldList = Model.getFields(); // тут конечно же вызывается класс Model ))
    } else {
      fieldList = fieldList.first.getFields();
    }
  }
}
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
RomReed
@RomReed
JavaScript, Flutter, ReactNative, Redux, Firebase
так?
abstract class Model {
  List<String> getFields();
}

class Data extends Model {
  late final int field1;
  late final int field2;
  
  Data({required this.field1, required this.field2});

  @override
  List<String> getFields() {
    return ["field1", "field2"];
  }
}

class Table<T extends Model> {
  final List<T> dataList;
  late List<String> fieldList;
  
  Table({required this.dataList, required T instance}) {
    if (dataList.isEmpty) {
      fieldList = instance.getFields();
    } else {
      fieldList = dataList.first.getFields();
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы