이들 클래스는 Flutter의 상태 관리 라이브러리인 flutter_bloc
에서 제공하는 주요 컴포넌트들입니다. 각각의 역할을 간략히 설명드리겠습니다.
BlocBuilder:
BlocBuilder
는 특정 Bloc
또는 Cubit
상태의 변경 사항을 수신하여 UI를 다시 빌드하는 위젯입니다. 주로 상태 기반 UI 업데이트에 사용됩니다.BlocBuilder<CounterCubit, int>(
builder: (context, count) {
return Text('$count');
},
);
BlocSelector:
BlocSelector
는 BlocBuilder
와 유사하지만, 상태의 특정 부분만을 선택하여 빌드합니다. 상태 전체가 아닌 일부만 관심이 있을 때 사용합니다.BlocSelector<CounterCubit, int, bool>(
selector: (state) => state.isEven,
builder: (context, isEven) {
return Text('$isEven');
},
);
BlocProvider:
BlocProvider
는 Bloc
또는 Cubit
인스턴스를 제공하는 위젯입니다. 일반적으로 상위 위젯 트리에 Bloc
을 제공하여 하위 위젯에서 접근할 수 있도록 합니다.BlocProvider(
create: (context) => CounterCubit(),
child: CounterPage(),
);
MultiBlocProvider:
MultiBlocProvider
는 여러 Bloc
또는 Cubit
인스턴스를 동시에 제공할 때 사용합니다. 코드의 가독성을 높이고 관리하기 쉽게 합니다.MultiBlocProvider(
providers: [
BlocProvider<CounterCubit>(create: (context) => CounterCubit()),
BlocProvider<AnotherCubit>(create: (context) => AnotherCubit()),
],
child: MyApp(),
);
BlocListener:
BlocListener
는 Bloc
또는 Cubit
상태의 변경 사항을 수신하여 특정 동작(예: 알림, 네비게이션 등)을 수행합니다. UI 빌드에는 영향을 미치지 않습니다.BlocListener<CounterCubit, int>(
listener: (context, state) {
if (state == 10) {
// Do something when state is 10
}
},
child: CounterPage(),
);
MultiBlocListener:
MultiBlocListener
는 여러 BlocListener
를 동시에 사용할 때 사용합니다. 코드의 가독성을 높이고 관리하기 쉽게 합니다.MultiBlocListener(
listeners: [
BlocListener<CounterCubit, int>(
listener: (context, state) {
if (state == 10) {
// Do something
}
},
),
BlocListener<AnotherCubit, AnotherState>(
listener: (context, state) {
// Another listener
},
),
],
child: MyApp(),
);
BlocConsumer:
BlocConsumer
는 BlocBuilder
와 BlocListener
의 기능을 결합한 위젯입니다. 상태 변경에 따라 UI를 빌드하고, 특정 동작도 수행할 수 있습니다.BlocConsumer<CounterCubit, int>(
listener: (context, state) {
if (state == 10) {
// Do something
}
},
builder: (context, state) {
return Text('$state');
},
);
RepositoryProvider:
RepositoryProvider
는 리포지토리 인스턴스를 제공하는 위젯입니다. 일반적으로 리포지토리는 데이터 계층을 관리하고, Bloc
또는 Cubit
에서 사용됩니다.RepositoryProvider(
create: (context) => CounterRepository(),
child: MyApp(),
);
MultiRepositoryProvider:
MultiRepositoryProvider
는 여러 리포지토리 인스턴스를 동시에 제공할 때 사용합니다. 코드의 가독성을 높이고 관리하기 쉽게 합니다.MultiRepositoryProvider(
providers: [
RepositoryProvider<CounterRepository>(create: (context) => CounterRepository()),
RepositoryProvider<AnotherRepository>(create: (context) => AnotherRepository()),
],
child: MyApp(),
);
이 클래스들은 모두 Flutter 애플리케이션에서 상태 관리를 보다 쉽게 하고, 코드의 가독성과 유지 보수성을 높이는 데 도움을 줍니다.