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(),
);
}
}
이 예시에서, MultiBlocListener
는 AuthenticationBloc
과 NetworkBloc
의 상태 변화를 감시하며, 각각의 상태에 따라 다른 작업을 수행합니다.
주의 사항
MultiBlocListener
는flutter_bloc
패키지의 일부이므로, 이를 사용하기 위해서는 해당 패키지를 프로젝트에 추가해야 합니다.- 각
BlocListener
는 상태 변화에 대해 한 번만 반응합니다. 즉, 같은 상태로의 연속된 변화에는 반응하지 않습니다.