UI를 디자인 할 때 아주 중요한 부분 !
setState() 객체에서 호출되면 state의 모든 하위 위젯이 다시 build 되므로, setState() 으로 변경하려는 부분이 tree의 작은 부분이라면, 하위에서 호출해야 한다saveLayer() : 코드에서 명시적으로 호출하지 않아도 saveLayer() 를 사용하는 다른 위젯이나 패키지가 호출될 수 있다
하지만, 과도하게 호출 시, jank 가 발생가능하다
런타임에 서버에서 오는 다양한 모양을 동적으로 표시해야 하는 경우
ex) 각각 투명도가 있고 겹칠 수도 있고 겹치지 않을 수도 있는 경우
불투명도와 클리핑 (이미지 자르는 기술) 는 값비싼 작업이므로 최소화 하는 것이 좋다
Opacity 는 Widget 형식이 아닌 이미지에 직접 적용하는 것이 좋다Opacity Widget에 간단한 모양이나 텍스트를 rapping 하는 대신, 반투명 색상으로 이미지를 그리게 끔 하는 것이 속도부분에서 더 빠르다Clipping 을 사용하는 대신 borderRadius 같은 Widget class에서 제공하는 속성을 사용해야 한다Grid와 List가 구현된 방식이 있는 앱이라면 성능문제를 일으킬 수 있다 !!!!
itemExtent 를 통해 child 가 스크롤 되는 방향으로 지정된 범위를 갖도록 한다PrototypeItem 항목은 스크롤 방향에서 자식 위젯이 주어진 위젯과 동일한 크기를 갖도록 한다child 요소의 수명주기는 view에서 scroll out 되면, 연관된 하위 트리, 상태 및 render 객체가 파괴된다. 목록의 동일한 위치에 있는 새로운 자식은 scroll back 될 때 새로운 요소, 상태 및 render객체와 함께 다시 생성되는 것
목록에 항목이 많은 경우, ListView.builder 생성자를 사용하여 한번에 모든 항목을 만드는 대신 화면에 scroll 하면서 항목을 만들어야 한다
즉, lazy 하게 만들으라는 것의 의미는, 미리 다 만들어 놓고 scroll 하는 것이 아니라 scroll 되는 동시에 목록들이 만들어지게 하라는 것이다
itemCOunt !!!!!!!
// itemCount: optionWidgetsList.length 이었던 코드를 아래와 같이 수정함
itemCount: widget.isExpanded ? optionWidgetsList.length : 0,