Sobes.tech
Middle

Mi a GlobalKeys a Flutterben, és hogyan használják őket?

sobes.tech MI

Válasz az MI-től

A GlobalKey egy egyedi kulcs, amely az alkalmazás teljes hierarchiájában azonosít egy widgetet.

Használata:

  1. A widget állapotának elérése: Lehetővé teszi egy StatefulWidget állapotának elérését bárhonnan a widgetfa részein.

    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);
      }
    }
    
    // ... máshol:
    myWidgetKey.currentState?.updateText("Updated");
    
  2. A widget állapotának megőrzése a helyének változtatásakor: Hasznos, amikor a widgetet másik helyre szeretnéd mozgatni az UI-ben, miközben megtartod az állapotát.

    GlobalKey keyForMovableWidget = GlobalKey();
    
    // ...
    
    Widget movableWidget = Container(
      key: keyForMovableWidget,
      color: Colors.blue,
      width: 100,
      height: 100,
    );
    
    // Amikor a movableWidget-et másik helyre mozgatod a hierarchiában,
    // az állapota megmarad a GlobalKey segítségével.
    
  3. A widget metódusainak hívása: Lehetővé teszi a widget nyilvános metódusainak hívását kívülről.

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

Fontos megjegyezni, hogy a GlobalKey gyakori használata bonyolíthatja a widget fa szerkezetét és nehezítheti a hibakeresést. Az esetek többségében célszerű más állapotkezelő mechanizmusokat, például Provider, Riverpod vagy Bloc használni. A GlobalKey-t csak akkor szabad alkalmazni, ha más megközelítések nem alkalmazhatók.