是否可以在飞镖中使用 getter 作为函数参数?

Is it possible to use a getter as function parameter in 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;
  });
}

这里Recordclass是freezed数据class。我不得不多次使用这个函数只是改变 record.number,这里 numberRecord class 的 getter。那我可以用这个getter作为函数参数吗?

你不能直接使用getters/setters作为函数,因为getters/setters的意义在于与成员变量没有区别。

您可以轻松地将 getter 包装在匿名函数中(例如 (record) => record.number),然后您可以为不同的 getter 提供不同的匿名函数:

这是一个具体的例子:

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;
  });
}