Flutter Key! ( UniqueKey vs ValueKey )

라디·2021년 6월 28일
0

UniqueKey vs ValueKey
두 키의 차이점이 뭘까?

  • ValueKey<T>: 상수를 갖는 객체에 키를 추가할 때 사용한다.
  • UniqueKey: 컬렉션에 자식이 있고 이들이 만들어지기 전 까지 자식의 값을 모르는 상황에서 사용한다.
  • ObjectKey: 같은 형식의 객체지만 프로퍼티 값이 다른 여러 객체가 있을 때 ObjectKey를 사용한다. product라는 전자상거래 앱이 있다고 가정하자. 두 제품의 이름이 같을 수 있다(두 판매자가 같은 이름의 상품을 파는 상황). 그리고 한 판매자가 여러 제품을 판다면 제품명과 판매자명을 조합해 특정 제품을 식별할 수 있다. 즉 ObjectKey로 전달하는 literal객체가 키다.
Key key = ObjectKey({
    "seller": peoduct.seller,
    "product": product.title,
})
  • PageStrorageKey: 스크롤 위치 등 페이지 정보를 저장하는 특수 키이다.
    ㄴ> 책 'flutter in Action' 中

왼쪽 화살표에 나와 있는 것 처럼 ValueKey를 사용하면 색이 변하지 않지만,
UniqueKey() 를 위와 같이 사용한다면, ListTile중 하나를 제거하면, 색상이 중구난방으로 바뀐다.

그래도 UniqueKey를 사용하려면 해당 ListView 가 포함된 Build보다 상위트리(또는 그 클래스?) 에서 UniqueKey를 ListView갯수만큼 만들어서 하나씩 할당해주면 됨.

그래서..

결론

UniqueKey는 Build전에 생성해놓고 사용해줘야 색이 안바뀜.
ValueKey는 그냥 위젯에다 적어놓으면 됨.

profile
피아노 배우고 싶다

0개의 댓글