Sobes.tech
Middle

InheritedWidget nedir ve Flutter'da nasıl kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

InheritedWidget, Flutter'da, widget ağacında aşağı doğru bilgiyi verimli bir şekilde yaymaya olanak tanıyan özel bir widget türüdür. Veri ve hizmetleri ara widget ağacına sağlamak için kullanılır, her ara widget'ın yapıcıları aracılığıyla açıkça iletmeye gerek kalmadan.

InheritedWidget'in temel özellikleri:

  • Verilerin verimli yayılması: InheritedWidget değiştiğinde, Flutter yalnızca ona bağlı olan alt ağaçtaki widget'ları yeniden oluşturur.
  • Verilere kolay erişim: Çocuk widget'lar, of() statik yöntemi kullanarak InheritedWidget'ten verilere erişebilir.
  • Bağımlılıkların yönetimi: updateShouldNotify yöntemi, bağımlı widget'ların ne zaman yeniden oluşturulması gerektiğini kontrol etmeye olanak tanır.

InheritedWidget nasıl kullanılır:

  1. InheritedWidget'tan türeyen bir sınıf oluşturun:

    class MyInheritedWidget extends InheritedWidget {
      const MyInheritedWidget({
        Key? key,
        required this.data,
        required Widget child,
      }) : super(key: key, child: child);
    
      final String data; // Yayınlanacak veriler
    
      // InheritedWidget örneğine erişim yöntemi
      static MyInheritedWidget of(BuildContext context) {
        final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();
        assert(result != null, 'Bağlamda MyInheritedWidget bulunamadı');
        return result!;
      }
    
      // Bağımlı widget'ların değişiklikler hakkında bilgilendirilip bilgilendirilmemesi gerektiğini belirler
      @override
      bool updateShouldNotify(MyInheritedWidget oldWidget) {
        return data != oldWidget.data; // Veri değiştiğinde bildirim yap
      }
    }
    
  2. InheritedWidget'i widget ağacına yerleştirin:

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MyInheritedWidget( // Widget alt ağacını sarmala
          data: 'InheritedWidget'ten Merhaba',
          child: MaterialApp(
            title: 'InheritedWidget Demo',
            home: Scaffold(
              appBar: AppBar(
                title: const Text('InheritedWidget Demo'),
              ),
              body: const Center(
                child: MyDependentWidget(), // Verileri kullanacak widget
              ),
            ),
          ),
        );
      }
    }
    
  3. Alt widget'tan verilere erişin:

    class MyDependentWidget extends StatelessWidget {
      const MyDependentWidget({super.key});
    
      @override
      Widget build(BuildContext context) {
        // of() metodunu kullanarak verilere erişim
        final String receivedData = MyInheritedWidget.of(context).data;
    
        return Text(
          receivedData,
          style: Theme.of(context).textTheme.headlineMedium,
        );
      }
    }
    

InheritedWidget, Provider, Bloc gibi Flutter'da birçok durum yönetimi çözümünün temelidir. Verimli ve deklaratif bir şekilde widget ağacında veri alışverişi sağlar.