Sobes.tech
Middle

Kas yra InheritedWidget ir kaip jį naudoti Flutter?

sobes.tech AI

Atsakymas iš AI

InheritedWidget — tai specialus Flutter widget tipo, kuris leidžia efektyviai skleisti informaciją žemyn per widget medį. Jis naudojamas duomenims ir paslaugoms teikti widgetų podalnyje be būtinybės juos aiškiai perduoti per kiekvieno tarpinio widget konstruktorius.

Pagrindinės InheritedWidget savybės:

  • Efektyvus duomenų platinimas: Kai InheritedWidget keičiasi, Flutter automatiškai perstatys tik tuos widgetus, kurie nuo jo priklauso.
  • Paprastas prieigos prie duomenų būdas: Vaiko widgetai gali gauti prieigą prie InheritedWidget duomenų naudodami statinį metodą of().
  • Priklausomybių valdymas: Metodas updateShouldNotify leidžia kontroliuoti, kada priklausomi widgetai turi būti perstatyti.

Kaip naudoti InheritedWidget:

  1. Sukurkite klasę, kuri paveldi iš InheritedWidget:

    class MyInheritedWidget extends InheritedWidget {
      const MyInheritedWidget({
        Key? key,
        required this.data,
        required Widget child,
      }) : super(key: key, child: child);
    
      final String data; // Duomenys, kurie bus platinami
    
      // Metodas, skirtas gauti InheritedWidget egzempliorių
      static MyInheritedWidget of(BuildContext context) {
        final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();
        assert(result != null, 'No MyInheritedWidget found in context');
        return result!;
      }
    
      // Nustato, ar turi būti pranešta priklausomiems widgetams apie pakeitimus
      @override
      bool updateShouldNotify(MyInheritedWidget oldWidget) {
        return data != oldWidget.data; // Pranešame, jei duomenys pasikeitė
      }
    }
    
  2. Padėkite InheritedWidget medyje:

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MyInheritedWidget( // Apvynioja widgetų medį
          data: 'Labas iš InheritedWidget',
          child: MaterialApp(
            title: 'InheritedWidget Demo',
            home: Scaffold(
              appBar: AppBar(
                title: const Text('InheritedWidget Demo'),
              ),
              body: const Center(
                child: MyDependentWidget(), // Widget, kuris naudos duomenis
              ),
            ),
          ),
        );
      }
    }
    
  3. Gauti prieigą prie duomenų iš vaiko widgeto:

    class MyDependentWidget extends StatelessWidget {
      const MyDependentWidget({super.key});
    
      @override
      Widget build(BuildContext context) {
        // Gauname prieigą prie duomenų naudodami of() metodą
        final String receivedData = MyInheritedWidget.of(context).data;
    
        return Text(
          receivedData,
          style: Theme.of(context).textTheme.headlineMedium,
        );
      }
    }
    

InheritedWidget yra pagrindas daugeliui būdų valdyti būseną Flutter, tokių kaip Provider, Bloc. Jis užtikrina efektyvų ir deklaratyvų duomenų mainų būdą widgetų medyje.