Skip to content

EventBus и EventBase ​

Шина событий служит для опционального общения компонентов и сервисов между собой

Событие из себя представляет четкое совершенное действие в прошедшем времени:

  • LoginEvent
  • TestCompletedEvent
  • HasFollowedEvent
dart
// [!code class:bad]
final class SendDiplomaBusEvent extends EventBase {}
dart
// [!code class:good]
final class DiplomaSentEvent extends EventBase {}

Неявная связь компонентов ​

Событие не должно использоваться для неявной связи бизнес-логики

dart
// [!code class:bad]
final class KnowledgeRefreshBusEvent extends EventBase {} 

...

Future<void> _refresh(BuildContext context) async {
    context.read<FailureScopeNotifier>().refresh();
    context.read<EventBus>().dispatch(const KnowledgeRefreshBusEvent()); 
}

...

EventListener<KnowledgeRefreshBusEvent>(
  listen: (context, event) {
    context.read<KnowledgeSprintTopUserBloc>().refresh(); 
    context.read<KnowledgeSprintStatsBloc>().reload(); 
  },
)
text
// [!code class:good]
Вызывать подобную бизнес-логику напрямую. 
Если тебе нужна подобная конструкция, значит ты что-то делаешь не так.
dart
// [!code class:good]
// В данном случае событие используется, чтобы обновить 
// другой экран в другой части приложения. 
// И эта связь абсолютно опциональна.

Future<void> submitForm() async {
  await _sendDiplomaClient.submit(courseId, state.name);
  eventBus?.dispatch(const DiplomaSentEvent()); 
}

...

EventListener<DiplomaSentEvent>(
    listen: (context, event) => context.read<CertificatesProfileCountBloc>().refresh(), 
),

Авторы

The avatar of contributor named as Arutyun Gevorkyan Arutyun Gevorkyan
The avatar of contributor named as Vadim Melnikov Vadim Melnikov
The avatar of contributor named as Pavel Nochevnoy Pavel Nochevnoy
The avatar of contributor named as melvspace melvspace

История