Sobes.tech
Middle

Kas ir InheritedWidget un kā to izmantot Flutter?

sobes.tech AI

Atbilde no AI

InheritedWidget ir īpaša veida Flutter widget, kas ļauj efektīvi izplatīt informāciju uz leju pa widgetu koku. To izmanto datu un pakalpojumu nodrošināšanai widgetu apakškokā bez nepieciešamības tos skaidri nodot caur katra starpposma widgeta konstruktoru.

Galvenās iezīmes InheritedWidget:

  • Efektīva datu izplatīšana: Kad InheritedWidget mainās, Flutter automātiski pārveido tikai tās widgetus apakškokā, kas ir no tā atkarīgi.
  • Vienkārša piekļuve datiem: Apakšwidgeti var piekļūt InheritedWidget datiem, izmantojot statisko metodi of().
  • Atkarību pārvaldība: Metode updateShouldNotify ļauj kontrolēt, kad atkarīgie widgeti jāpārveido.

Kā izmantot InheritedWidget:

  1. Izveidot klasi, kas manto no InheritedWidget:

    class MyInheritedWidget extends InheritedWidget {
      const MyInheritedWidget({
        Key? key,
        required this.data,
        required Widget child,
      }) : super(key: key, child: child);
    
      final String data; // Dati, kas tiks izplatīti
    
      // Metode, lai iegūtu InheritedWidget eksemplāru
      static MyInheritedWidget of(BuildContext context) {
        final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();
        assert(result != null, 'MyInheritedWidget nav atrasts kontekstā');
        return result!;
      }
    
      // Nosaka, vai jāziņo atkarīgie widgeti par izmaiņām
      @override
      bool updateShouldNotify(MyInheritedWidget oldWidget) {
        return data != oldWidget.data; // Ziņot, ja dati ir mainījušies
      }
    }
    
  2. Ievietot InheritedWidget widgetu kokā:

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MyInheritedWidget( // Ievieto apakškoku ar datiem
          data: 'Sveiki no InheritedWidget',
          child: MaterialApp(
            title: 'InheritedWidget Demo',
            home: Scaffold(
              appBar: AppBar(
                title: const Text('InheritedWidget Demo'),
              ),
              body: const Center(
                child: MyDependentWidget(), // Widget, kas izmantos datus
              ),
            ),
          ),
        );
      }
    }
    
  3. Pieņemt datus no apakšwidgeta:

    class MyDependentWidget extends StatelessWidget {
      const MyDependentWidget({super.key});
    
      @override
      Widget build(BuildContext context) {
        // Piekrīt piekļuvi datiem ar of() metodi
        final String receivedData = MyInheritedWidget.of(context).data;
    
        return Text(
          receivedData,
          style: Theme.of(context).textTheme.headlineMedium,
        );
      }
    }
    

InheritedWidget ir pamats daudziem stāvokļa pārvaldības risinājumiem Flutter, piemēram, Provider, Bloc. Tas nodrošina efektīvu un deklaratīvu veidu datu apmaiņai widgetu kokā.