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
BlocListener
와 BlocBuilder
를 한 번에 쓸 수 있게 합쳐 놓은 위젯입니다.
RepositoryProvider
RepositoryProvider
는 BlocProvider
와 유사하지만 Bloc 대신 Repository 객체를 subtree에 제공하며 관리는 하지 않습니다.
MultiRepositoryProvider
는 MultiBlocProvider
와 유사하지만 RepositoryProvider를 사용합니다. MultiBlocProvider와 마찬가지로 RepositoryProvider의 제네릭을 명시해야합니다.