Sobes.tech
Middle

InheritedWidget nima va uni Flutterda qanday ishlatish mumkin?

sobes.tech AI

AIdan javob

InheritedWidget Flutter'da, widgetlar daraxtida ma'lumotlarni samarali tarzda pastga tarqatish imkonini beradigan maxsus turdagi widgetdir. Bu, har bir oraliq widgetning konstruktorlari orqali ularni aniq uzatmasdan, ma'lumotlar va xizmatlarni widgetlar daraxtiga taqdim etish uchun ishlatiladi.

InheritedWidget ning asosiy xususiyatlari:

  • Ma'lumotlarni samarali tarqatish: InheritedWidget o'zgarganda, Flutter faqat unga bog'liq bo'lgan widgetlarni qayta quradi.
  • Ma'lumotlarga oddiy kirish: Bolalar widgetlar of() statik metod yordamida InheritedWidget ma'lumotlariga kirishlari mumkin.
  • Qaramliklarni boshqarish: updateShouldNotify metodi, qaysi vaqtda qaram bo'lgan widgetlar qayta qurilishi kerakligini nazorat qilish imkonini beradi.

InheritedWidget qanday ishlatiladi:

  1. InheritedWidget dan meros olgan sinfni yarating:

    class MyInheritedWidget extends InheritedWidget {
      const MyInheritedWidget({
        Key? key,
        required this.data,
        required Widget child,
      }) : super(key: key, child: child);
    
      final String data; // Tarqatiladigan ma'lumotlar
    
      // InheritedWidget nusxasiga kirish uchun metod
      static MyInheritedWidget of(BuildContext context) {
        final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();
        assert(result != null, 'Contextda MyInheritedWidget topilmadi');
        return result!;
      }
    
      // Qaram widgetlar o'zgarishlar haqida xabar berish kerakligini belgilaydi
      @override
      bool updateShouldNotify(MyInheritedWidget oldWidget) {
        return data != oldWidget.data; // Ma'lumotlar o'zgarganda xabar berish
      }
    }
    
  2. InheritedWidget ni widget daraxtiga joylashtiring:

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MyInheritedWidget( // Widget daraxtini o'rab oladi
          data: 'InheritedWidget dan salom',
          child: MaterialApp(
            title: 'InheritedWidget Demo',
            home: Scaffold(
              appBar: AppBar(
                title: const Text('InheritedWidget Demo'),
              ),
              body: const Center(
                child: MyDependentWidget(), // Ma'lumotlarni ishlatadigan widget
              ),
            ),
          ),
        );
      }
    }
    
  3. Bolalar widgetdan ma'lumotlarga kirish:

    class MyDependentWidget extends StatelessWidget {
      const MyDependentWidget({super.key});
    
      @override
      Widget build(BuildContext context) {
        // of() metodidan foydalanib ma'lumotlarni olamiz
        final String receivedData = MyInheritedWidget.of(context).data;
    
        return Text(
          receivedData,
          style: Theme.of(context).textTheme.headlineMedium,
        );
      }
    }
    

InheritedWidget Flutter'da ko'plab holatni boshqarish yechimlarining asosidir, masalan Provider, Bloc. U samarali va deklarativ tarzda ma'lumotlarni widgetlar daraxtida almashish imkonini beradi.