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(), 
),