Sobes.tech
Middle

Wat zijn GlobalKeys in Flutter en hoe worden ze gebruikt?

sobes.tech AI

Antwoord van AI

GlobalKey is een unieke sleutel die een widget identificeert in de hele hiërarchie van de applicatie.

Gebruikt voor:

  1. Toegang tot de status van een widget: Maakt het mogelijk om toegang te krijgen tot de StatefulWidget-status vanaf elke plek in de widgetboom.

    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);
      }
    }
    
    // ... ergens anders:
    myWidgetKey.currentState?.updateText("Updated");
    
  2. Opslaan van de status van een widget bij het verplaatsen in de boom: Handig wanneer je een widget naar een andere plek in de UI wilt verplaatsen, terwijl je de status behoudt.

    GlobalKey keyForMovableWidget = GlobalKey();
    
    // ...
    
    Widget movableWidget = Container(
      key: keyForMovableWidget,
      color: Colors.blue,
      width: 100,
      height: 100,
    );
    
    // Bij het verplaatsen van movableWidget naar een andere plek in de boom,
    // blijft de status behouden dankzij GlobalKey.
    
  3. Aanroepen van widget-methoden: Maakt het mogelijk om publieke methoden van een widget aan te roepen vanaf buiten.

    GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
    
    // ...
    
    Scaffold(
      key: scaffoldKey,
      // ...
    );
    
    // ... ergens anders:
    scaffoldKey.currentState?.openDrawer();
    

Het is belangrijk om te onthouden dat frequent gebruik van GlobalKey de widget-boom kan compliceren en het debuggen kan bemoeilijken. In de meeste gevallen is het beter om andere mechanismen voor statusbeheer te gebruiken, zoals Provider, Riverpod of Bloc. GlobalKey moet alleen worden gebruikt wanneer andere benaderingen niet toepasbaar zijn.