Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
GlobalKey - глобальные ключи для доступа к State
GlobalKey позволяет получить доступ к State виджета и его контексту из любого места приложения. Это уникальный идентификатор для виджета, работающий в масштабе всего приложения.
Основные назначения
1. Валидация форм
final _formKey = GlobalKey<FormState>();
Form(
key: _formKey,
child: Column(
children: [
TextFormField(
validator: (val) => val?.isEmpty ?? true ? "Required" : null,
),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
print("Form valid");
}
},
child: Text("Submit"),
),
],
),
)
2. Доступ к методам State
final _childKey = GlobalKey<_ChildState>();
// Вызов метода в State дочернего виджета
_childKey.currentState?.myMethod();
// Получение контекста
var ctx = _childKey.currentContext;
3. Управление ScaffoldState
final _scaffoldKey = GlobalKey<ScaffoldState>();
Scaffold(
key: _scaffoldKey,
body: ElevatedButton(
onPressed: () {
_scaffoldKey.currentState?.openDrawer();
_scaffoldKey.currentState?.showSnackBar(
SnackBar(content: Text("Hi"))
);
},
child: Text("Open"),
),
)
Типы GlobalKey
- GlobalKey<State<T>> - базовый ключ для StatefulWidget
- GlobalKey<FormState> - для Form виджетов
- GlobalKey<ScaffoldState> - для Scaffold
- GlobalKey<NavigatorState> - для Navigator
Когда использовать
- Валидация форм (основное применение)
- Управление Scaffold (drawer, snackbar)
- Сохранение State при перестроении дерева
- Прямой доступ к методам дочернего виджета
Когда НЕ использовать
- Частые обновления состояния
- Сложное управление состоянием (используй Provider, BLoC)
- Синхронизация данных между компонентами
Best Practice
- Используй GlobalKey только для форм и специфических виджетов
- Предпочитай State Management (Provider, Riverpod) для глобального состояния
- Всегда указывай тип: GlobalKey<FormState>, не просто GlobalKey
- Закрывай ресурсы в dispose()
GlobalKey - мощный инструмент для специфических задач, но его переиспользование указывает на проблемы архитектуры приложения.