Sobes.tech
Middle

Ce sunt GlobalKeys în Flutter și cum sunt utilizate?

sobes.tech AI

Răspuns de la AI

GlobalKey este o cheie unică care identifică un widget în întreaga ierarhie a aplicației.

Este utilizată pentru:

  1. Accesarea stării widget-ului: Permite accesul la starea unui StatefulWidget din orice loc din arborele de widget-uri.

    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);
      }
    }
    
    // ... undeva în altă parte:
    myWidgetKey.currentState?.updateText("Updated");
    
  2. Salvarea stării widget-ului atunci când își schimbă poziția în arbore: Util pentru mutarea widget-ului într-o altă parte a UI-ului, păstrând starea sa.

    GlobalKey keyForMovableWidget = GlobalKey();
    
    // ...
    
    Widget movableWidget = Container(
      key: keyForMovableWidget,
      color: Colors.blue,
      width: 100,
      height: 100,
    );
    
    // La mutarea movableWidget în altă parte a arborelui,
    // starea sa va fi păstrată datorită GlobalKey.
    
  3. Apelarea metodelor widget-ului: Permite apelarea metodelor publice ale widget-ului din exterior.

    GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
    
    // ...
    
    Scaffold(
      key: scaffoldKey,
      // ...
    );
    
    // ... undeva în altă parte:
    scaffoldKey.currentState?.openDrawer();
    

Este important să rețineți că utilizarea frecventă a GlobalKey poate complica arborele de widget-uri și poate îngreuna depanarea. În cele mai multe cazuri, este preferabil să utilizați alte mecanisme de gestionare a stării, cum ar fi Provider, Riverpod sau Bloc. GlobalKey trebuie utilizat numai atunci când alte abordări nu sunt aplicabile.