Sobes.tech
Middle

Flutterдеги GlobalKeys эмне жана алар кандай колдонулат?

sobes.tech AI

AIден жооп

GlobalKey — бул уникалдуу ачкыч, ал колдонмодогу бардык иерархияда виджетти идентификациялайт.

Колдонуу үчүн:

  1. Виджеттин күйүнө жетүү: Позволяет получить доступ к 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. Виджеттин күйүн сактоо — анын жайгашкан жерин өзгөртүп жатканда: Колдонуу үчүн, виджетті башка 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 көп колдонуу виджеттердин дарагын кыйындатат жана debuggingти кыйындатат. Көп учурда, башка ыкмаларды колдонуу жакшыраак, мисалы Provider, Riverpod же Bloc. GlobalKey колдонуу керек болгондо гана, башка ыкмалар жеткиликсиз болсо гана колдонулушу керек.