위젯, 요소
Flutter는 내부적으로 각 위젯에 대한 요소를 생성합니다.
위젯이 트리 구조로 생성되는 것처럼 요소도 트리 구조로 생성됩니다.
요소 트리는 Flutter 앱의 구조를 볼 수 있게 해주는 프레임워크이지만 원본 위젯에 대한 참조를 통해 더 자세한 정보를 볼 수 있습니다.
응용 프로그램이 시작되면 위젯이 하위 위젯으로 이동하고 확인이 수행됩니다.
이 시점에서 Element는 해당 위젯의 Type과 Key가 이전 위젯과 동일한지 확인하고 동일한 경우 해당 위젯의 참조를 업데이트합니다.
Stateless Widget의 경우 키가 없으므로 유형만 확인합니다.
반면에 StatefulWidget에는 트리 구조 외에도 위젯 정보를 저장하는 데 사용되는 State Object도 있습니다.
위젯이 변경되면 Flutter는 요소 트리를 확인합니다.
위젯의 유형을 비교하고 동일한 경우 값을 업데이트하십시오. StatefulWidget은 키 값을 비교하여 위젯이 변경되면 키 값이 변경되었음을 감지하여 해당 요소를 삭제하고 위젯을 탐색하면서 동일한 키를 가진 요소를 찾기 시작합니다.
일치하면 해당 항목에 대한 참조를 업데이트합니다.
위젯. .
키의 위치는 해당 stateful 위젯에 키를 추가하면 예측할 수 없는 문제가 발생하기 때문에 키를 위젯 트리의 상단, 즉 유지해야 하는 상태 정보의 위치에 추가해야 합니다.
열쇠
Flutter는 다양한 Key 클래스를 제공합니다.
용도에 따라 사용 가능한 키 유형이 달라집니다.
값 키
디스패치 목록과 같이 목록에서 반복되지 않는 고유한 상수 값을 사용하는 경우 해당 값을 키로 사용할 수 있습니다.
객체 키
사용자 정보 목록을 출력하는 경우, 각 개별 정보 중 일부는 다른 정보와 중복될 수 있지만, 이들 정보를 조합하여 고유한 값을 생성할 수 있습니다.
고유 키
각 위젯에 중복된 정보가 있거나 고유한 키를 각 위젯에 직접 할당해야 하는 경우에 사용합니다.
PageStorageKey
이 키는 사용자의 스크롤 위치를 저장하는 데만 사용됩니다.
앱이 스크롤바를 기억하도록 합니다.
글로벌 키
위젯은 상태를 잃지 않고 부모를 변경하거나 완전히 다른 위젯 트리에서 액세스할 수 있는 특정 위젯에 대한 정보를 만들 수 있습니다.
즉, 동일한 상태를 유지하면서 서로 다른 두 개의 화면에 동일한 위젯을 표시해야 하거나 트리의 다른 위젯과 상태 정보를 공유하고 싶지 않을 때 사용합니다.