Sobes.tech
Middle

Qu'est-ce que les GlobalKeys dans Flutter et comment sont-elles utilisées?

sobes.tech IA

Réponse de l'IA

GlobalKey est une clé unique qui identifie un widget dans toute la hiérarchie de l'application.

Utilisé pour :

  1. Accéder à l'état du widget : Permet d'accéder à l'état d'un StatefulWidget depuis n'importe quel endroit dans l'arbre 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);
      }
    }
    
    // ... ailleurs :
    myWidgetKey.currentState?.updateText("Updated");
    
  2. Conserver l'état du widget lors de son déplacement dans l'arbre : Utile lorsque vous souhaitez déplacer un widget dans une autre partie de l'UI tout en conservant son état.

    GlobalKey keyForMovableWidget = GlobalKey();
    
    // ...
    
    Widget movableWidget = Container(
      key: keyForMovableWidget,
      color: Colors.blue,
      width: 100,
      height: 100,
    );
    
    // Lors du déplacement de movableWidget dans une autre partie de l'arbre,
    // son état sera conservé grâce à GlobalKey.
    
  3. Appeler des méthodes du widget : Permet d'appeler des méthodes publiques du widget depuis l'extérieur.

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

Il est important de se rappeler que l'utilisation fréquente de GlobalKey peut compliquer l'arbre de widgets et rendre le débogage plus difficile. Dans la plupart des cas, il est préférable d'utiliser d'autres mécanismes de gestion d'état, tels que Provider, Riverpod ou Bloc. GlobalKey doit être utilisé uniquement lorsque d'autres approches ne sont pas applicables.