파파비의 블로그
플러터, flutter) Provider - of.context 대신 Consumer 사용하기 본문
of.context와 Consumer는 성능상으로 완전히 똑같다.
다만 Consumer는 사용하기에 따라 of.context보다 더 퍼포먼스를 높일 수도 있다.
of.context를 사용하고, notifyLisiteners() 가 실행되면
of.context를 사용하는 위젯 전체가 rebuild된다.
Consumer는 해당 위젯에서 일부부만 rebuild되도록 설정할 수 있는 것이다.
만약에 큰 위젯이 존재하면, 따로 쪼개서 of.context를 사용하던가
or
Consumer를 사용해서 해당 부분만 rebuild되게 하면 되는 것이다.
아니면 해당 위젯 전체는 한번만 읽어들인 뒤,
나머지 일부분만 rebuild 되게 하려면
of.context로 한 뒤에 listen: false 로 구독은 취소해두고,
일부분만 Consumer를 사용하면 된다.
정확히 사용하는 방법은,
이런식으로 원하는 위젯 위에 Consumer<T>로 감싼 뒤에,
builder의 return값을 통해 원하는 위젯을 연결시키면 된다.
인수는 3개, context, product, child인데,
context는 뭐 context인 것이고,
product(2번째 인수)는 우리가 공유하는 provider 객체를 의미한다.
그리고 child가 조금 생소한데 child는 다시 rebuild되지 않는 부분을 의미한다.
만약 builder의 return 위젯이 rebuild 될 때, rebuild될 필요가 없는 위젯이 존재한다면,
Consumer의 child 속성이 있다. 거기에 위젯을 등록해두면 되고,
builder에서는 child를 통해 레퍼런스를 가져갈 수 있다.
그러니까 한 마디로 조금의 성능 향상을 볼 수 있는 것이다.
rebuild 될 때 마저 꼭 rebuild 할 필요가 없는 위젯들은 child속성에 따로 떼어놓고 레퍼런스로 사용하란 뜻이다.
이 child 부분은 다시 해당 위젯을 따로 쪼개서 + of.context로도 구현 가능한 부분
단지 우리가 어떻게 사용하느냐의 문제이다.
'개발 > flutter' 카테고리의 다른 글
플러터, flutter) chip, spacer, badge 위젯 (0) | 2020.06.08 |
---|---|
플러터, flutter) MultiProvider, Provider 여러개 공유하기 (0) | 2020.06.08 |
플러터, flutter) Provider 객체를 공유하는 다른 방법 (context를 쓰지 않을 때) (0) | 2020.06.08 |
플러터, flutter) Nested Provider(Widget State 수준) 사용하기 (0) | 2020.06.08 |
플러터, flutter) Provider를 사용하는 방법 (1) | 2020.06.07 |