register method

void Function() register({
  1. required String pluginId,
  2. required TSlot slot,
  3. required SlotWidgetBuilder<TData> builder,
  4. int order = 0,
})

Registers one contribution and returns a disposer that unregisters it.

A given pluginId + slot pair may only be registered once.

Implementation

void Function() register({
  required String pluginId,
  required TSlot slot,
  required SlotWidgetBuilder<TData> builder,
  int order = 0,
}) {
  if (pluginId.isEmpty) {
    throw ArgumentError.value(pluginId, 'pluginId', 'Must not be empty.');
  }
  if (_registrations.any(
    (registration) =>
        registration.pluginId == pluginId && registration.slot == slot,
  )) {
    throw StateError(
      'Slot contribution "$pluginId" is already registered for slot '
      '"$slot".',
    );
  }

  _registrations.add(
    _SlotRegistration<TSlot, TData>(
      pluginId: pluginId,
      slot: slot,
      order: order,
      registrationOrder: _nextRegistrationOrder++,
      builder: builder,
    ),
  );
  _notifyListeners();

  var disposed = false;
  return () {
    if (disposed) return;
    disposed = true;
    unregister(pluginId: pluginId, slot: slot);
  };
}