Можно ли использовать геттер в качестве параметра функции в dart?

У меня такая повторяющаяся функция:

      repetitiveFunction(Type type) async* {
  yield* _recordCollectionQuery(type)
    .snapshots()
    .map((snapshot) {
      final List<Record> records = snapshot.docs
        .map((doc) => RecordDto.fromFirestore(doc).toDomain())
        .toList();
    // Here instead of using "record1.number", I want to use parameter like "record1.param"
    records.sort((record1, record2) => record2.number.compareTo(record1.number));
    return records;
  });
}

Вот класс freezedкласс данных. Мне приходится использовать эту функцию несколько раз, просто меняя record.number, здесь number является получателем Recordкласс. Могу ли я использовать этот геттер в качестве параметра функции?

1 ответ

Вы не можете напрямую использовать геттеры / сеттеры в качестве функций, поскольку цель геттеров / сеттеров должна быть неотличима от переменных-членов.

Вместо этого вы можете легко обернуть геттеры анонимными функциями (например, , а затем вы можете предоставить разные анонимные функции для разных геттеров:

Вот конкретный пример:

      Stream<List<Record>> repetitiveFunction(
  List<Record> records,
  Comparable Function(Record) getComparableProperty,
) async* {
  yield* _recordCollectionQuery(type).snapshots().map((snapshot) {
    final List<Record> records = snapshot.docs
        .map((doc) => RecordDto.fromFirestore(doc).toDomain())
        .toList();
    records.sort((record1, record2) => getComparableProperty(record2)
        .compareTo(getComparableProperty(record1)));
    return records;
  });
}
Другие вопросы по тегам