resolve method

List<ResolvedSlotContribution<TSlot, TData>> resolve(
  1. TSlot slot
)

Resolves contributions for slot in deterministic order.

Implementation

List<ResolvedSlotContribution<TSlot, TData>> resolve(TSlot slot) {
  final matches =
      _registrations
          .where((registration) => registration.slot == slot)
          .toList()
        ..sort((left, right) {
          final orderCompare = left.order.compareTo(right.order);
          if (orderCompare != 0) return orderCompare;

          final registrationCompare = left.registrationOrder.compareTo(
            right.registrationOrder,
          );
          if (registrationCompare != 0) return registrationCompare;

          return left.pluginId.compareTo(right.pluginId);
        });

  return matches
      .map(
        (registration) => ResolvedSlotContribution<TSlot, TData>._(
          pluginId: registration.pluginId,
          slot: registration.slot,
          order: registration.order,
          registrationOrder: registration.registrationOrder,
          builder: registration.builder,
        ),
      )
      .toList(growable: false);
}