Sobes.tech
Middle

Kas ir GlobalKeys Flutter un kā tie tiek izmantoti?

sobes.tech AI

Atbilde no AI

GlobalKey ir unikāls atslēgas veids, kas identificē vidget visu lietojumprogrammas hierarhijā.

Izmanto:

  1. Vidgeta stāvokļa piekļuve: Позволяет получить доступ к 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);
      }
    }
    
    // ... citur:
    myWidgetKey.currentState?.updateText("Updated");
    
  2. Vidgeta stāvokļa saglabāšana, mainot tā atrašanās vietu hierarhijā: Noder, ja nepieciešams pārvietot vidgetu citā UI daļā, saglabājot tā stāvokli:

    GlobalKey keyForMovableWidget = GlobalKey();
    
    // ...
    
    Widget movableWidget = Container(
      key: keyForMovableWidget,
      color: Colors.blue,
      width: 100,
      height: 100,
    );
    
    // Pārvietojot movableWidget citur hierarhijā,
    // tā stāvoklis saglabāsies GlobalKey dēļ.
    
  3. Vidgeta metožu izsaukšana: ļauj izsaukt publiskās metodes ārpusē:

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

Svarīgi atcerēties, ka bieža GlobalKey izmantošana var sarežģīt vidgetu koku un padarīt atkļūdošanu grūtāku. Labāk ir izmantot citus stāvokļa pārvaldības mehānismus, piemēram, Provider, Riverpod vai Bloc. GlobalKey izmanto tikai tad, ja citi pieejamie risinājumi nav piemērojami.