Можно ли использовать геттер в качестве параметра функции в 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;
});
}