Key
플러터 강좌를 보고 정리한 내용입니다.
Key
- 위젯의 State를 보존
- 위젯이나 요소들을 유니크하게 식별
Stateful Widget의 경우 해당 위젯의 state 정보가 State 객체에 저장이 된다. State 객체는 위젯 tree를 기준으로 자신의 state를 해당 위젯에 적용하는데, 위젯의 순서가 바뀌거나 삭제가 되는 등 위젯 tree 상의 변화가 있을 경우 기존 위젯 tree 상의 순서를 따르기 때문에 이 변화를 제대로 반영하지 못하게 된다. key는 이를 해결할 수 있는 것으로, 각각의 위젯마다 유니크한 키 값을 부여함으로써 위젯의 순서가 바뀌거나 삭제가 되어 위젯 tree 상의 변화가 있을 때에도 State 객체가 올바른 위젯에 자신의 state를 적용할 수 있게 해 준다.
- Flutter는 기본적으로 위젯의 타입으로 위젯 tree 상에서 각 위젯을 식별
- Stateful 위젯의 식별을 위해서는 Key가 필요
- Value key는 value 값을 가지는 Stateful 위젯에 사용(TextField 같은)
Global key
Global key는 전체 앱 안에서 유일한 키다. Global key를 사용하면 다른 곳에서 한 위젯의 state 정보를 참조할 수 있다. 따라서 위젯 밖에서 그 위젯의 State에 선언된 함수나 변수를 참조할 수 있게 된다.
다음과 같이 ScaffoldMessenger도 사용할 수 있다.
final rootScaffoldKey = GlobalKey<ScaffoldMessengerState>();
// ...
Widget build(BuildContext context) {
return MaterialApp(
scaffoldMessengerKey: rootScaffoldKey,
// ...
);
}