BuildContext
위젯 하나 당 BuildContext 가 존재한다.
위젯에 필요한 다양한 정보가 들어 있고 그중 위젯 트리에서 위치와 관련된 정보가 대표적이다.
이 정보를 이용하여 위젯 트리에서 상위 위젯 객체를 얻을 수 있다.
MyApp? app = context.findAncestorWidgetOfExactType<MyApp>();
엘리먼트 트리가 바로 BuildContext 객체의 트리이다.
abstract class Element extends DiagnosticableTree implements BuildContext { ... }
Element는 BuildContext를 구현해서 만들었으므로 엘리먼트 트리에 유지되는 객체가 BuildContext 객체라고 보면 된다.
위젯을 식별하는 Key
모든 위젯은 키값을 가질 수 있다.
모든 위젯의 상위 클래스인 Widget 클래스의 생성자를 보면 매개변수에 Key 라는 변수 하나만 선언되어 있다.
Key를 사용하는 경우!!
상위 위젯에서 같은 StatefulWidget을 두 개 이상 사용하는 경우 상위 위젯 에서 하위 위젯의 순서를 바꿔서 다시 빌드하면 위젯 객체는 분명히 바뀌지만 State 객체를 각 위젯 객체에 올바르게 연결해야 하는데 타입이 같아 처음에 생성된 순서대로 연결하다 보니 원하는 결과가 나오지 않는다.
이 때 각 하위 StatefulWidget 에 key: Uniquekey() 를 넣어 주면 제대로 구현되는 것을 확인 할 수 있다.
Key 하위 에는 GlobalKey, LocalKey가 있고 차이점은 "키값이 어느 영역에서 유일한 값인가?" 이다.
GlobalKey 는 앱 전체, LocalKey 는 이 키값이 지정된 위젯의 부모부터 자식 위젯에서 유일한 값이다.
GlobalKey 는 currentState, currentWidget 속성으로 현재 이용하는 키값으로 식별되는 위젯과 State 객체를 얻을 수 있다.
단, GlobalKey를 사용하면 위젯의 트리 구조가 변경되거나 모든 위젯을 다시 빌드할 수 있으므로 단순히 위젯을 식별하는 용도로만 사용할 키값은 GlobalKey로 만들지 않는 것이 좋다.
LocalKey는 이 키로 식별할 위젯의 부모부터 자식에서 유일한 값을 지정할 때 사용한다.
LocalKey 하위 클래스로 ValueKey, ObjectKey, UniqueKey 가 있고 주로 이 클래스를 이용해 위젯의 키값을 지정한다.
- ValueKey : 문자열, 숫자 키값
- ObjectKey : 객체 키값
- UniqueKey : 유일한 난수 키값
http://www.yes24.com/Product/Goods/117206541
'# 02 > Flutter' 카테고리의 다른 글
[Flutter] What’s new in Dart and Flutter (Flutter 3.10 / Dart 3.0) (0) | 2023.06.19 |
---|---|
[Flutter] 면접 질문! (0) | 2023.03.19 |
[Flutter] State의 생명 주기 (0) | 2023.03.12 |
[Flutter] StatefulWidget 의 State (0) | 2023.03.12 |
[Flutter] 위젯 트리 (0) | 2023.03.12 |