1

我有一个这样的重复功能:

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

这里Record的类是freezed数据类。我必须多次使用这个函数只是改变record.number,这里number是一个Record类的吸气剂。那么我可以使用这个 getter 作为函数参数吗?

4

1 回答 1

2

您不能直接将 getter/setter 用作函数,因为 getter/setter 的点与成员变量无法区分。

相反,您可以轻松地将 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;
  });
}
于 2021-04-04T21:14:08.563 回答