En Flutter, un GlobalKey
es un tipo especial de clave (key) que se puede usar para identificar y acceder de manera única a un widget dentro del árbol de widgets. A diferencia de las claves locales (LocalKey
), que solo necesitan ser únicas dentro del padre inmediato, un GlobalKey
debe ser único en todo el árbol de widgets.
Usos de GlobalKey
- Acceso a un widget: Permite acceder al estado y métodos de un widget desde fuera del árbol de widgets.
- Navegación y manejo de estado: Se usa en combinación con
Navigator
para controlar la navegación. - Validación de formularios: Permite validar formularios usando
FormState
.
Ejemplos de uso de GlobalKey
Acceso a un widget específico
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { final GlobalKey<_MyWidgetState> _myWidgetKey = GlobalKey<_MyWidgetState>(); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('GlobalKey Example')), body: Column( children: [ MyWidget(key: _myWidgetKey), ElevatedButton( onPressed: () { _myWidgetKey.currentState?.doSomething(); }, child: Text('Press me'), ), ], ), ), ); } } class MyWidget extends StatefulWidget { MyWidget({Key? key}) : super(key: key); @override _MyWidgetState createState() => _MyWidgetState(); } class _MyWidgetState extends State<MyWidget> { void doSomething() { print('Button pressed!'); } @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.all(16.0), child: Text('Hello, World!'), ); } }
En este ejemplo, el botón puede llamar al método doSomething
en el estado del widget MyWidget
usando el GlobalKey
.
Validación de un formulario
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: FormExample(), ); } } class FormExample extends StatelessWidget { final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Form Validation Example')), body: Padding( padding: EdgeInsets.all(16.0), child: Form( key: _formKey, child: Column( children: [ TextFormField( validator: (value) { if (value == null || value.isEmpty) { return 'Please enter some text'; } return null; }, ), ElevatedButton( onPressed: () { if (_formKey.currentState?.validate() == true) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Processing Data')), ); } }, child: Text('Submit'), ), ], ), ), ), ); } }
En este ejemplo, el GlobalKey
permite validar el formulario cuando se presiona el botón «Submit». El formulario se valida llamando al método validate
del estado del formulario usando _formKey.currentState
.
El GlobalKey
en Flutter es una herramienta para acceder y manipular widgets desde fuera del árbol de widgets, manejar el estado y realizar tareas como la validación de formularios. Su uso correcto puede facilitar el desarrollo de aplicaciones complejas y ayudar en la gestión de widgets y su estado.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.