Sobes.tech
Middle

InheritedWidget деген эмне жана аны Flutterде кантип колдонуу керек?

sobes.tech AI

AIден жооп

InheritedWidget — бул Flutterдеги атайын түрдөгү виджет, ал натыйжалуу түрдө маалыматтарды түпкүдөн төмөндө таратууга мүмкүндүк берет. Ал маалыматтарды жана кызматтарды виджеттердин алдындагы бөлүмүнө берүү үчүн колдонулат, алардын ар бир аралык виджеттеринин конструкторлору аркылуу ачык өткөрбөстөн.

Негизги өзгөчөлүктөрү:

  • Маалыматтарды натыйжалуу таратуу: InheritedWidget өзгөргөндө, Flutter автоматтык түрдө анын көзүнө көз каранды болгон гана виджеттерди кайра курууга милдеттенет.
  • Маалыматтарга оңой жетүү: Балдар виджеттери of() статикалык методу аркылуу InheritedWidgetтин маалыматтарына жетише алат.
  • Тармактык көзкарандыулукту башкаруу: updateShouldNotify методу көзкаранды болгон виджеттер кайсы учурда кайра курулушу керектигин көзөмөлдөөгө мүмкүндүк берет.

Кантип колдонуу:

  1. InheritedWidgetтен мурас алган класс түзүңүз:

    class MyInheritedWidget extends InheritedWidget {
      const MyInheritedWidget({
        Key? key,
        required this.data,
        required Widget child,
      }) : super(key: key, child: child);
    
      final String data; // Таратуучу маалыматтар
    
      // InheritedWidgetтин экземплярин алуу методу
      static MyInheritedWidget of(BuildContext context) {
        final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();
        assert(result != null, 'No MyInheritedWidget found in context');
        return result!;
      }
    
      // Өзгөрүүлөр тууралуу кабарлоо керекпи дегенди аныктоо
      @override
      bool updateShouldNotify(MyInheritedWidget oldWidget) {
        return data != oldWidget.data; // Маалыматтар өзгөргөндө кабарлоо
      }
    }
    
  2. InheritedWidgetти виджет дарагына жайгаштырыңыз:

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MyInheritedWidget( // Виджеттердин дарагына ороп коюу
          data: 'Салам InheritedWidgetтен',
          child: MaterialApp(
            title: 'InheritedWidget Demo',
            home: Scaffold(
              appBar: AppBar(
                title: const Text('InheritedWidget Demo'),
              ),
              body: const Center(
                child: MyDependentWidget(), // Маалыматты колдонгон виджет
              ),
            ),
          ),
        );
      }
    }
    
  3. Балдар виджетинен маалыматтарды алуу:

    class MyDependentWidget extends StatelessWidget {
      const MyDependentWidget({super.key});
    
      @override
      Widget build(BuildContext context) {
        // `of()` методу аркылуу маалыматтарды алуу
        final String receivedData = MyInheritedWidget.of(context).data;
    
        return Text(
          receivedData,
          style: Theme.of(context).textTheme.headlineMedium,
        );
      }
    }
    

InheritedWidget — Flutterдеги көптөгөн абал башкаруу чечимдеринин негизги компоненти, мисалы Provider, Bloc. Ал эффективдүү жана декларативдүү жол менен маалымат алмашууну камсыздайт.