본문으로 건너뛰기

Bloc widgets

  • flutter_bloc: 7.0.0

BlocBuilder

새로운 state에 반응하여 위젯을 반환하는 빌더입니다. state 변화에 바뀌는 부분만 포함하는 것이 좋습니다.

BlocBuilder<BlocA, BlocAState>(
bloc: blocA,
buildWhen: (previous, current) {
return true;
},
builder: (context, state) {
return ChildA();
},
);
  • bloc: BlocProvider에 의해 부모로부터 원하는 Bloc를 제공받지 못하는 경우, bloc파라미터를 통해 직접 전달 할 수 있습니다.
  • buildWhen: state 변화에 따라 builder를 호출하려면 true, 호출하지 않으려면 false를 반환하는 콜백을 설정할 수 있습니다.
  • builder: state 데이터에 따라 원하는 위젯을 반환하는 콜백을 설정합니다.

BlocProvider

child 포함 그 subtree에 있는 자식들에게 Bloc를 제공합니다. 대부분 상황에서 create를 사용하여 원하는 Bloc 객체를 생성하여 BlocProvider가 관리하게 합니다.

BlocProvider

BlocProvider(
lazy: true,
create: (context) => BlocA(),
child: ChildA(),
);
  • lazy: 기본적으로 BlocProvider는 subtree에서 context.read<BlocA>()를 호출할 때 create로 등록된 콜백을 호출하여 Bloc를 생성합니다. Bloc를 즉시 생성해야 하는 경우 false로 설정하면 됩니다.
  • create: Bloc를 생성하는 콜백을 설정합니다. BlocProvider가 소멸될 때, bloc.close()를 호출합니다.
  • child: 위젯을 설정합니다.

subtree에 포함되지 않은 경로로 생성되어 있는 Bloc를 전달해야할 때, BlocProvider.value를 사용할 수 있습니다. 자신이 생성한 Bloc가 아니기 때문에 관리하지 않고 제공만 합니다.

BlocProvider.value(
value: context.read<BlocA>(),
child: ScreenA(),
);
  • value: 제공할 Bloc를 설정합니다.
  • child: 위젯을 설정합니다.

MultiBlocProvider

MultiBlocProvider 사용시 BlocProvider<BlocA> 처럼 사용할 Bloc를 명시해줘야 합니다.

MultiBlocProvider(
providers: [
BlocProvider<BlocA>(
create: (BuildContext context) => BlocA(),
),
BlocProvider<BlocB>(
create: (BuildContext context) => BlocB(),
),
BlocProvider<BlocC>(
create: (BuildContext context) => BlocC(),
),
],
child: ChildA(),
);

BlocListener

BlocListener는 Bloc가 생성될때 방출하는 초기 상태에는 반응하지 않습니다. 라우팅, 스낵바, 다이얼로그 등 state 변화에 따라 다양한 기능을 구현할 수 있습니다.

BlocListener

BlocListener<BlocA, BlocAState>(
bloc: blocA,
listenWhen: (previous, current) {
return true;
},
listener: (context, state) {
// route, snackbar, dialog, etc...
},
child: ChildA(),
);
  • bloc: BlocProvider에 의해 부모로부터 원하는 Bloc를 제공받지 못하는 경우, bloc파라미터를 통해 직접 전달 할 수 있습니다.
  • listenWhen: state 변화에 따라 listener를 호출하려면 true, 호출하지 않으려면 false를 반환하는 콜백을 설정할 수 있습니다.
  • listener: state 데이터에 따라 원하는 기능을 수행하는 콜백을 설정합니다.
  • child: 위쳇을 설정합니다.

MultiBlocListener

MultiBlocListener(
listeners: [
BlocListener<BlocA, BlocAState>(
listener: (context, state) {},
),
BlocListener<BlocB, BlocBState>(
listener: (context, state) {},
),
BlocListener<BlocC, BlocCState>(
listener: (context, state) {},
),
],
child: ChildA(),
);

BlocConsumer

BlocListenerBlocBuilder를 한 번에 쓸 수 있게 합쳐 놓은 위젯입니다.

RepositoryProvider

RepositoryProviderBlocProvider와 유사하지만 Bloc 대신 Repository 객체를 subtree에 제공하며 관리는 하지 않습니다.

MultiRepositoryProviderMultiBlocProvider와 유사하지만 RepositoryProvider를 사용합니다. MultiBlocProvider와 마찬가지로 RepositoryProvider의 제네릭을 명시해야합니다.