Sobes.tech
Middle

Čo sú GlobalKeys vo Flutteri a ako sa používajú?

sobes.tech AI

Odpoveď od AI

GlobalKey je jedinečný kľúč, ktorý identifikuje widget v celej hierarchii aplikácie.

Používa sa na:

  1. Prístup k stavu widgetu: Umožňuje prístup k stavu StatefulWidget z akéhokoľvek miesta v strome widgetov.

    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);
      }
    }
    
    // ... inde:
    myWidgetKey.currentState?.updateText("Updated");
    
  2. Uloženie stavu widgetu pri jeho presune v strome: Užitočné, keď chcete presunúť widget na iné miesto v UI, pričom zachováte jeho stav.

    GlobalKey keyForMovableWidget = GlobalKey();
    
    // ...
    
    Widget movableWidget = Container(
      key: keyForMovableWidget,
      color: Colors.blue,
      width: 100,
      height: 100,
    );
    
    // Pri presune movableWidget na iné miesto v strome,
    // jeho stav zostane zachovaný vďaka GlobalKey.
    
  3. Volanie metód widgetu: Umožňuje volať verejné metódy widgetu zvonku.

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

Je dôležité si uvedomiť, že časté používanie GlobalKey môže zložiť strom widgetov a sťažiť ladenie. Vo väčšine prípadov je vhodnejšie použiť iné mechanizmy správy stavu, ako je Provider, Riverpod alebo Bloc. GlobalKey by sa mal používať iba vtedy, keď nie sú iné prístupy vhodné.