Bloc간 통신

Bloc과 Bloc의 통신

프레젠테이션 층(presentation layer)에서 Bloc 간 통신을 구현하는 한 가지 방법은 위젯을 통해 Bloc 인스턴스에 접근하고, 이벤트를 전달하는 것입니다. 이를 위해 BlocProviderBlocBuilder 또는 BlocListener를 사용할 수 있습니다.

1. BlocProvider를 사용하여 Bloc에 접근

BlocProvider를 사용하면, 프레젠테이션 층의 위젯에서 다른 Bloc에 접근할 수 있습니다.

BlocProvider.of<OtherBloc>(context).add(OtherEvent());

이 코드는 현재 컨텍스트에서 OtherBloc을 찾아 OtherEvent를 추가합니다.

2. BlocBuilder 또는 BlocListener를 사용하여 상태 변화 감지

BlocBuilderBlocListener를 사용하면 특정 Bloc의 상태 변화를 감지하고, 필요에 따라 다른 Bloc에 이벤트를 전달할 수 있습니다.

BlocListener<MyBloc, MyState>(
  listener: (context, state) {
    if (state is MySpecificState) {
      BlocProvider.of<OtherBloc>(context).add(OtherEvent());
    }
  },
  child: ...,
)

이 예제에서 MyBloc의 특정 상태(MySpecificState)가 되었을 때, OtherBlocOtherEvent를 전달합니다.

3. 직접 이벤트 전달

위젯 내에서 사용자의 인터랙션(버튼 클릭, 폼 제출 등)에 대응하여 다른 Bloc에 이벤트를 전달할 수도 있습니다.

ElevatedButton(
  onPressed: () {
    BlocProvider.of<OtherBloc>(context).add(OtherEvent());
  },
  child: Text('Trigger Event'),
)

이 코드는 버튼이 눌렸을 때, OtherBlocOtherEvent를 전달합니다.

주의 사항

  • Bloc의 사용은 가능한 한 최소한으로 유지하는 것이 좋습니다. 복잡한 상호작용이 필요한 경우에만 다른 Bloc을 참조하도록 합니다.
  • Bloc 간의 의존성은 강한 결합도를 초래할 수 있으므로, 가능한 한 각 Bloc의 독립성을 유지하며 설계하는 것이 바람직합니다.
  • BlocProvider.of를 사용할 때는 현재 위젯 트리에 해당 Bloc이 제공되고 있는지 확인해야 합니다.

프레젠테이션 층에서 Bloc 간 통신은 사용자 인터페이스와 상호작용하는 방식에 따라 결정되므로, 앱의 사용성과 유지보수성을 고려하여 적절한 전략을 선택해야 합니다.

Last Updated:
Contributors: RiGang