MultiBlocListener

特定某些条件时执行(MultiBlocListener

MultiBlocListener는 Flutter에서 여러 Bloc 또는 Cubit의 상태 변화를 감지하고, 각각에 대한 부수 효과(side effects)를 처리하기 위한 위젯입니다. BlocListener가 단일 Bloc 또는 Cubit의 상태 변화에 반응하는 것과 달리, MultiBlocListener를 사용하면 여러 Bloc 또는 Cubit의 상태 변화를 한 번에 관리할 수 있습니다. 이는 코드를 깔끔하게 유지하고, 복잡한 상태 관리를 하는 대규모 앱에서 특히 유용합니다.

사용 방법

MultiBlocListener는 여러 BlocListener 객체를 리스트 형태로 받아, 각각의 Bloc 또는 Cubit에 대한 상태 변화를 감시합니다.

MultiBlocListener(
  listeners: [
    BlocListener<BlocA, BlocAState>(
      listener: (context, state) {
        // BlocA의 상태 변화에 대한 처리
      },
    ),
    BlocListener<BlocB, BlocBState>(
      listener: (context, state) {
        // BlocB의 상태 변화에 대한 처리
      },
    ),
    // 추가적인 BlocListener들...
  ],
  child: MyChildWidget(),
)

  • listeners: 여러 BlocListener 인스턴스를 포함하는 리스트입니다.
  • child: MultiBlocListener에 의해 제공되는 상태 변화를 사용할 자식 위젯입니다.

기능

  • 여러 상태 관리: 여러 Bloc 또는 Cubit의 상태 변화를 하나의 위젯에서 관리합니다.
  • 코드 정리: 여러 상태 변화에 대한 리스너를 한 곳에서 정의함으로써 코드의 가독성과 구조화를 향상시킵니다.
  • 효율적인 부수 효과 처리: 각 상태 변화에 대한 부수 효과를 분리하여 처리할 수 있습니다.

예시

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MultiBlocListener(
      listeners: [
        BlocListener<AuthenticationBloc, AuthenticationState>(
          listener: (context, state) {
            if (state is AuthenticationFailure) {
              Navigator.of(context).pushNamed('/login');
            }
          },
        ),
        BlocListener<NetworkBloc, NetworkState>(
          listener: (context, state) {
            if (state is NetworkUnavailable) {
              // 네트워크 불가능 상태 처리
            }
          },
        ),
      ],
      child: HomePage(),
    );
  }
}

이 예시에서, MultiBlocListenerAuthenticationBlocNetworkBloc의 상태 변화를 감시하며, 각각의 상태에 따라 다른 작업을 수행합니다.

주의 사항

  • MultiBlocListenerflutter_bloc 패키지의 일부이므로, 이를 사용하기 위해서는 해당 패키지를 프로젝트에 추가해야 합니다.
  • BlocListener는 상태 변화에 대해 한 번만 반응합니다. 즉, 같은 상태로의 연속된 변화에는 반응하지 않습니다.
Last Updated:
Contributors: RiGang