Sobes.tech
Middle

¿Qué son las GlobalKeys en Flutter y cómo se utilizan?

sobes.tech AI

Respuesta de la IA

GlobalKey es una clave única que identifica un widget en toda la jerarquía de la aplicación.

Se utiliza para:

  1. Acceso al estado del widget: Permite acceder al estado de un StatefulWidget desde cualquier lugar en el árbol de widgets.

    GlobalKey<_MyWidgetState> myWidgetKey = GlobalKey();
    
    // ...
    
    class MyWidget extends StatefulWidget {
      MyWidget({Key? key}) : super(key: key);
    
      @override
      _MyWidgetState createState() => _MyWidgetState();
    }
    
    class _MyWidgetState extends State<MyWidget> {
      String _text = "Initial";
    
      void updateText(String newText) {
        setState(() {
          _text = newText;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Text(_text);
      }
    }
    
    // ... en otra parte:
    myWidgetKey.currentState?.updateText("Updated");
    
  2. Guardar el estado del widget al cambiar su ubicación en el árbol: Útil cuando necesitas mover un widget a otra parte de la UI, conservando su estado.

    GlobalKey keyForMovableWidget = GlobalKey();
    
    // ...
    
    Widget movableWidget = Container(
      key: keyForMovableWidget,
      color: Colors.blue,
      width: 100,
      height: 100,
    );
    
    // Al mover movableWidget a otro lugar en el árbol,
    // su estado se conservará gracias a GlobalKey.
    
  3. Llamar a métodos del widget: Permite llamar a métodos públicos del widget desde fuera.

    GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
    
    // ...
    
    Scaffold(
      key: scaffoldKey,
      // ...
    );
    
    // ... en otra parte:
    scaffoldKey.currentState?.openDrawer();
    

Es importante recordar que el uso frecuente de GlobalKey puede complicar el árbol de widgets y dificultar la depuración. En la mayoría de los casos, es preferible usar otros mecanismos de gestión de estado, como Provider, Riverpod o Bloc. GlobalKey debe usarse solo cuando otros enfoques no sean aplicables.