위젯 트리에서 위젯이 움직일 때마다 현재 상태를 보존하는 역할

주로 Element가 Widget을 식별하는 데 사용

Widget 트리가 빌드되면 그 뒤에 Element트리가 생성됩니다. Widget 트리가 재구성되면 Widget 자체는 폐기 및 재구성되며 Element는 기본적으로 재사용됩니다. 그리고 Element가 재사용될 때 새로 재구성된 Widget를 참조하게 됩니다.

위젯에 Key가 필요한 경우

대부분의 경우는 key를 신경 쓸 필요가 없지만 상태를 유지하고 있는 같은 종류의 위젯을 컬렉션에 더하거나, 제거하거나, 정렬할 때 key가 필요합니다.

같은 타입의 key를 설정하지 않은 StatefulWidget이 바뀌면 type과 비교를 해서 type이 같기 때문에 갱신할 필요가 없다고 판단하기 때문에 바뀌지 않습니다.

위젯을 생성할 때 key에 UniqueKey를 넣어주면 바뀌게됩니다.

key를 설정해 Widget과 Element의 연결이 바뀌었을 때 원래의 key를 같은 계층 내에서 어디로 옮겨졌는지를 찾아 가능한 한 재이용하게 됩니다. Row아래로 교환한 2개의 Widget이 있기 때문에 재사용하게 됩니다. 그러나 교환하려는 위젯 사이에 Padding 등이 있으면 Padding 아래에 교환하는 두 개의 Widget이 없기 때문에  말단의 Widget에 Key를 붙이면 동작하지 않습니다. 이러한 경우에는 Padding에 key를 붙이면 교환이 잘 이루어집니다.

Key를 앱에 추가해야한다면, 유지해야 하는 상태 정보가 있는 위젯 트리의 최상단에 추가해야 합니다.

key 유형

Key에는 LocalKey와 GlobalKey의 두 종류가 있습니다.

  1. LocalKey (부모 Widget 이하에서 유니크한 키)