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