Bloc간 통신
Bloc과 Bloc의 통신
프레젠테이션 층(presentation layer)에서 Bloc 간 통신을 구현하는 한 가지 방법은 위젯을 통해 Bloc 인스턴스에 접근하고, 이벤트를 전달하는 것입니다. 이를 위해 BlocProvider
와 BlocBuilder
또는 BlocListener
를 사용할 수 있습니다.
1. BlocProvider를 사용하여 Bloc에 접근
BlocProvider
를 사용하면, 프레젠테이션 층의 위젯에서 다른 Bloc에 접근할 수 있습니다.
BlocProvider.of<OtherBloc>(context).add(OtherEvent());
이 코드는 현재 컨텍스트에서 OtherBloc
을 찾아 OtherEvent
를 추가합니다.
2. BlocBuilder 또는 BlocListener를 사용하여 상태 변화 감지
BlocBuilder
나 BlocListener
를 사용하면 특정 Bloc의 상태 변화를 감지하고, 필요에 따라 다른 Bloc에 이벤트를 전달할 수 있습니다.
BlocListener<MyBloc, MyState>(
listener: (context, state) {
if (state is MySpecificState) {
BlocProvider.of<OtherBloc>(context).add(OtherEvent());
}
},
child: ...,
)
이 예제에서 MyBloc
의 특정 상태(MySpecificState
)가 되었을 때, OtherBloc
에 OtherEvent
를 전달합니다.
3. 직접 이벤트 전달
위젯 내에서 사용자의 인터랙션(버튼 클릭, 폼 제출 등)에 대응하여 다른 Bloc에 이벤트를 전달할 수도 있습니다.
ElevatedButton(
onPressed: () {
BlocProvider.of<OtherBloc>(context).add(OtherEvent());
},
child: Text('Trigger Event'),
)
이 코드는 버튼이 눌렸을 때, OtherBloc
에 OtherEvent
를 전달합니다.
주의 사항
- Bloc의 사용은 가능한 한 최소한으로 유지하는 것이 좋습니다. 복잡한 상호작용이 필요한 경우에만 다른 Bloc을 참조하도록 합니다.
- Bloc 간의 의존성은 강한 결합도를 초래할 수 있으므로, 가능한 한 각 Bloc의 독립성을 유지하며 설계하는 것이 바람직합니다.
BlocProvider.of
를 사용할 때는 현재 위젯 트리에 해당 Bloc이 제공되고 있는지 확인해야 합니다.
프레젠테이션 층에서 Bloc 간 통신은 사용자 인터페이스와 상호작용하는 방식에 따라 결정되므로, 앱의 사용성과 유지보수성을 고려하여 적절한 전략을 선택해야 합니다.