GlobalKey를 사용하면 _Time 클래스의 인스턴스를 const로 생성할 수 없는 이유는 GlobalKey가 내부적으로 상태를 유지하기 때문입니다.
const 위젯의 특징const 생성자는 불변(immutable)인 위젯을 생성합니다.const 위젯은 메모리 상에 한 번만 생성되고, 동일한 속성을 가진 다른 위젯들과 공유됩니다.GlobalKey와 const의 충돌GlobalKey는 위젯 트리 내에서 유일해야 하며, 위젯의 상태를 추적하는 데 사용됩니다.Form과 같은 상태 기반 위젯을 제어합니다.const 생성자는 위젯과 관련된 모든 객체가 완전히 불변이어야 하기 때문에, GlobalKey를 사용하는 위젯에서 const를 사용할 수 없습니다.class _Time extends StatelessWidget {
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
const _Time({super.key}); // const 생성자
Widget build(BuildContext context) {
return Form(
key: formKey, // 가변 상태를 가진 GlobalKey 사용
child: Text('Example'),
);
}
}
GlobalKey는 위젯의 상태를 추적하고 가변적인 동작을 수행합니다.const로 생성된 _Time 위젯은 불변성을 요구하므로, 가변적인 GlobalKey와 충돌합니다.에러 메시지 예시:
Const constructor can't be used because 'formKey' isn't a const variable.
_Time 클래스의 생성자에서 const를 제거하여 클래스 인스턴스를 일반 객체로 만듭니다.class _Time extends StatelessWidget {
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
_Time({super.key}); // const 제거
Widget build(BuildContext context) {
return Form(
key: formKey,
child: Text('Example'),
);
}
}
GlobalKey는 가변 상태를 유지하며, 이를 통해 위젯의 상태를 추적하고 제어합니다.const는 불변성을 요구하므로, GlobalKey와 함께 사용할 수 없습니다.GlobalKey를 사용하는 위젯은 항상 비-const로 생성해야 합니다.const는 위젯의 재사용성과 성능을 최적화하기 위해 사용되지만, 상태를 추적하거나 조작하는 위젯에서는 사용할 수 없습니다.Form, TextFormField)에서는 GlobalKey가 필수적이므로, const 대신 일반 생성자를 사용해야 합니다.Tip: 만약 GlobalKey가 필요 없는 단순 위젯이라면, const를 적극적으로 활용해 성능을 최적화할 수 있습니다! 😊