Sobes.tech
Middle

Ի՞նչ են GlobalKeys-ը Flutter-ում և ինչպես են դրանք օգտագործվում։

sobes.tech AI

Պատասխան AI-ից

GlobalKey-ը եզակի բանալին է, որը նույնականացնում է վիդջեթը ամբողջ հավելվածի հիերարխիայում:

Օգտագործվում է՝

  1. Վիդջեթի State-ին մուտք գործելու համար: Позволяет получить доступ к StatefulWidget State из любого места в дереве виджетов.

    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);
      }
    }
    
    // ... այլ վայրում:
    myWidgetKey.currentState?.updateText("Updated");
    
  2. Վիդջեթի State-ի պահպանման համար՝ երբ այն փոխում է իր դիրքը հիերարխիայում: Օգտակար է, երբ անհրաժեշտ է տեղափոխել վիդջեթը այլ մասի UI-ում՝ պահպանելով նրա վիճակը:

    GlobalKey keyForMovableWidget = GlobalKey();
    
    // ...
    
    Widget movableWidget = Container(
      key: keyForMovableWidget,
      color: Colors.blue,
      width: 100,
      height: 100,
    );
    
    // Երբ տեղափոխում եք movableWidget-ը այլ տեղ հիերարխիայում,
    // նրա վիճակը կմնա GlobalKey-ի շնորհիվ:
    
  3. Վիդջեթի մեթոդներ կանչելու համար: Позволяет вызывать публичные методы виджета извне.

    GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
    
    // ...
    
    Scaffold(
      key: scaffoldKey,
      // ...
    );
    
    // ... այլ վայրում:
    scaffoldKey.currentState?.openDrawer();
    

Կարևոր է հիշել, որ հաճախակի օգտագործումը GlobalKey կարող է բարդացնել վիդջեթների ծառը և դժվարացնել դեբագը։ Հաճախ ավելի լավ է օգտագործել այլ կառավարման մեխանիզմներ՝ ինչպիսիք են Provider, Riverpod կամ Bloc։ GlobalKey-ը պետք է օգտագործել միայն այն ժամանակ, երբ այլ մեթոդներ չեն կիրառելի։