Flutter bloc - 1

sejun·2022년 2월 15일
0

BlocBuilderblocbuilder 기능이 필요한 Flutter 위젯입니다. 'BlocBuilder'는 새 상태에 대한 응답으로 위젯 빌드를 처리합니다. BlocBuilderStreamBuilder와 매우 유사하지만 필요한 상용구 코드의 양을 줄이기 위한 더 간단한 API가 있습니다. builder 함수는 잠재적으로 여러 번 호출될 수 있으며 상태에 대한 응답으로 위젯을 반환하는 순수 함수여야 합니다.

탐색, 대화 상자 표시 등과 같은 상태 변경에 대한 응답으로 무엇이든 "수행"하려면 BlocListener를 참조하세요.

bloc 매개변수가 생략되면 BlocBuilderBlocProvider와 현재 BuildContext를 사용하여 자동으로 조회를 수행합니다.

BlocBuilder<BlocA, BlocAState>(
  builder: (context, state) {
    // return widget here based on BlocA's state
  }
)

builder 함수가 호출되는 시기를 세밀하게 제어하기 위해 선택적 buildWhen을 제공할 수 있습니다. buildWhen은 이전 블록 상태와 현재 블록 상태를 가져와서 부울 값을 반환합니다. buildWhen이 true를 반환하면 builderstate와 함께 호출되고 위젯이 다시 빌드됩니다. buildWhen이 false를 반환하면 builderstate와 함께 호출되지 않고 다시 빌드가 발생하지 않습니다.

BlocBuilder<BlocA, BlocAState>(
  buildWhen: (previousState, state) {
    // return true/false to determine whether or not
    // to rebuild the widget with state
  },
  builder: (context, state) {
    // return widget here based on BlocA's state
  }
)

BlocSelector

BlocSelector는 'BlocBuilder'와 유사하지만 개발자가 현재 블록 상태를 기반으로 새 값을 선택하여 업데이트를 필터링할 수 있는 Flutter 위젯입니다. 선택한 값이 변경되지 않으면 불필요한 빌드가 방지됩니다. 'BlocSelector'가 'builder'를 다시 호출해야 하는지 여부를 정확하게 결정하려면 선택한 값이 변경 불가능해야 합니다.

BlocSelector<BlocA, BlocAState, SelectedState>(
  selector: (state) {
    // return selected state based on the provided state.
  },
  builder: (context, state) {
    // return widget here based on the selected state.
  },
)

selector 에서는 변화가 감지되길 원하는 state를 리턴하고, builder 에서는 selector에서 반환된 state를 기반으로 리빌드 됩니다. 한 블로그에서 BlocBuilder의 buildWhen파라미터와의 차이점이 무엇이냐 라는 질문에대한 글을 볼수 있었는데, bloc에 올라온 이슈에 대한 답글로서 buildWhen 파라미터는 정확히 해당 state에 대해서만 build된다는 보장이 없기때문에 더 강력하게 조건화 하기위해 blocSelector을 사용하라 라는 답변이 달렸습니다. 명확한 이유는 알수없지만 buildWhen이 state에 대한 build를 완벽하게 보장해주지 못하기때문에 추후 개발에서는 blocSelector을 이용해 명확하게 해주는것이 더 좋아보입니다.

profile
하잉

0개의 댓글