BlocSelector 란?

SEUNGHWANLEE·2022년 1월 17일
0

Flutter

목록 보기
4/6
post-thumbnail

flutter_bloc update를 보다가 못보던 Widget이 있었다. 평소에 BlocBuilder 만 사용했었는데 이제 원하는 state 관련해서만 rebuild를 할 수 있게 됐다.


BlocSelector

  • sample code
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.
  },
)

공식문서를 보면

BlocSelectorBlocBuilder 와 유사하지만 개발자들로 하여금 현재 bloc state 중에 새로운 값을 선택하게해서 필터링을 할 수 있도록 하였습니다. 선택된 value가 변하지 않으면 불필요한 빌드는 하지않습니다. BlocSelectorbuilder 의 호출여부를 더 정확하게 결정하기 위해서 선택된 값(value)는 불변(immutable) 해야합니다.

만약, bloc parameter가 생략되었다면 BlocSelectorBlocProvidercurrentContext를 통해서 자동으로 찾아냅니다.

라고 적혀있다.

이렇게 된다면 기존에 BlocBuilder를 사용해서 return 되었던 Widget안에 여러 state를 관련해서 담고 있었다면, 기존 Widget 내 state를 나눠서 Widget을 build 할 수 있지 않을까 하는 개인적인 생각이다.

DartVM 내 GC(Garbage Collector)와 BlocSelector의 만남으로 짧은 생명주기를 가진 StatelessWidget를 더 효율적으로 사용할 수 있게 됐다고 생각한다.

예를 들어서 '음료'라는 객체 안에 '음료량(액체)'과 '얼음량'이 별도의 state로 존재한다고 했을 때 기존에 사용하던 BlocBuilder는 하나의 '음료'라는 객체의 변화가 있을 때 마다 build를 했다면 '음료량'과 '얼음량'을 별도로 처리해줄 수 있지 않을까 하는 생각이다.

class Drink {
	double liquid;
   	double ice;
}

추후에 테스트 코드를 작성해서 포스트를 업데이트 해보자 ! 🧐

profile
잡동사니 😁

0개의 댓글