APP/Dart & Flutter

[Flutter] Key 개념 | Key의 종류

JOKUN 2023. 12. 25. 22:04

 

 

key란?

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

key는 주로 Element가 Widget을 식별하는 데 사용되며, 대부분의 경우 key를 신경 쓸 필요가 없지만 상태를 유지하고 있는 같은 종류의 위젯을 컬렉션에 더하거나, 제거하거나, 정렬할 때 key가 필요하다.

 

Key를 활용하려면 위젯 트리에 대한 이해가 필요하다.

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

 

위젯 트리가 변경되었는지 여부는 다음과 같은 순서로 판단하며, 변경되었을 시에 화면을 draw 하고 그렇지 않으면 유지한다. 

  1. 위젯이 동일한 타입인지 비교하고 다를 경우 갱신.
  2. 같은 key인지 비교해 다르면 갱신. 만약 key를 설정하지 않은 경우는 null로 설정되어 있음

 

Key의 종류

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

 

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

  • ValueKey : 하나의 정보에서 생성되는 키, 숫자, 문자열 등 값을 넣어서 사용할 수 있다.
  • ObjectKey : 객체에서 생성하는 키, 같은 타입이라도 객체의 내용이 다르면 다른 키가 된다.
  • UniqueKey : 특정 Widget 내에서 고유 한 키
  • PageStorageKey: 페이지 스크롤 위치가 있는 키

2.GlobalKey(앱 내에서 고유한 키)

* 주의할 점은 uniquekey는  자동으로 키를 만들어 주기 때문에 편리하지만 key를 사용해 액세스 할 때는 그 값을 기억할 필요가 있다.

 

 

참고하면 좋을 강의 ▶️

해당 강의에서 Key의 개념 부터 Key 종류, 언제 사용하는지의 코드 예시 등을 들어 잘 설명해주기때문에, 강의를 한 번 보고 정리된 걸 보는 게 이해하는데 훨씬 도움 되는 듯하다. 

https://www.youtube.com/watch?v=lQB6HjleLMs