flutter_bloc update를 보다가 못보던 Widget이 있었다. 평소에 BlocBuilder
만 사용했었는데 이제 원하는 state 관련해서만 rebuild를 할 수 있게 됐다.
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.
},
)
공식문서를 보면
BlocSelector
는BlocBuilder
와 유사하지만 개발자들로 하여금 현재 bloc state 중에 새로운 값을 선택하게해서 필터링을 할 수 있도록 하였습니다. 선택된 value가 변하지 않으면 불필요한 빌드는 하지않습니다.BlocSelector
가builder
의 호출여부를 더 정확하게 결정하기 위해서 선택된 값(value)는 불변(immutable) 해야합니다.
만약,
bloc
parameter가 생략되었다면BlocSelector
가BlocProvider
와currentContext
를 통해서 자동으로 찾아냅니다.
라고 적혀있다.
이렇게 된다면 기존에 BlocBuilder
를 사용해서 return
되었던 Widget
안에 여러 state를 관련해서 담고 있었다면, 기존 Widget
내 state를 나눠서 Widget을 build 할 수 있지 않을까 하는 개인적인 생각이다.
DartVM 내 GC(Garbage Collector)와 BlocSelector
의 만남으로 짧은 생명주기를 가진 StatelessWidget
를 더 효율적으로 사용할 수 있게 됐다고 생각한다.
예를 들어서 '음료'라는 객체 안에 '음료량(액체)'과 '얼음량'이 별도의 state로 존재한다고 했을 때 기존에 사용하던 BlocBuilder
는 하나의 '음료'라는 객체의 변화가 있을 때 마다 build
를 했다면 '음료량'과 '얼음량'을 별도로 처리해줄 수 있지 않을까 하는 생각이다.
class Drink {
double liquid;
double ice;
}
추후에 테스트 코드를 작성해서 포스트를 업데이트 해보자 ! 🧐