Sobes.tech
Middle

Mis on InheritedWidget ja kuidas seda Flutteris kasutada?

sobes.tech AI

Vastus AI-lt

InheritedWidget on spetsiaalne Flutteri vidin, mis võimaldab tõhusalt levitada teavet allapoole vidinate puus. Seda kasutatakse andmete ja teenuste pakkumiseks vidinate puu alamkonstruktsioonidele ilma neid otseselt iga vahepealse vidina konstruktorite kaudu edastamata.

InheritedWidgeti peamised omadused:

  • Tõhus andmete levitamine: Kui InheritedWidget muutub, Flutter uuendab automaatselt ainult neid vidinaid puus, mis sellest sõltuvad.
  • Lihtne andmetele juurdepääs: Alamvidinad saavad andmetele ligi, kasutades staatilist meetodit of().
  • Sõltuvuste haldamine: Meetod updateShouldNotify võimaldab kontrollida, millal sõltuvad vidinad peaksid uuesti ehitatama.

Kuidas kasutada InheritedWidgeti:

  1. Loo klass, mis pärib InheritedWidgetist:

    class MyInheritedWidget extends InheritedWidget {
      const MyInheritedWidget({
        Key? key,
        required this.data,
        required Widget child,
      }) : super(key: key, child: child);
    
      final String data; // Andmed, mis levitatakse
    
      // Meetod InheritedWidget eksemplari saamiseks
      static MyInheritedWidget of(BuildContext context) {
        final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();
        assert(result != null, 'MyInheritedWidget ei leidu kontekstis');
        return result!;
      }
    
      // Määrab, kas teavitada sõltuvaid vidinaid muudatustest
      @override
      bool updateShouldNotify(MyInheritedWidget oldWidget) {
        return data != oldWidget.data; // Teavitame, kui andmed on muutunud
      }
    }
    
  2. Paigalda InheritedWidget vidinate puusse:

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MyInheritedWidget( // Kattub vidinate alamkonstruktsiooniga
          data: 'Tere InheritedWidgetist',
          child: MaterialApp(
            title: 'InheritedWidget Demo',
            home: Scaffold(
              appBar: AppBar(
                title: const Text('InheritedWidget Demo'),
              ),
              body: const Center(
                child: MyDependentWidget(), // Vidin, mis kasutab andmeid
              ),
            ),
          ),
        );
      }
    }
    
  3. Saada andmeid alamvidinast:

    class MyDependentWidget extends StatelessWidget {
      const MyDependentWidget({super.key});
    
      @override
      Widget build(BuildContext context) {
        // Saad andmed `of()` meetodi abil
        final String receivedData = MyInheritedWidget.of(context).data;
    
        return Text(
          receivedData,
          style: Theme.of(context).textTheme.headlineMedium,
        );
      }
    }
    

InheritedWidget on aluseks paljudele Flutteri oleku haldamise lahendustele, nagu Provider, Bloc. See tagab tõhusa ja deklaratiivse viisi andmete vahetamiseks vidinate puus.