Middle
Ի՞նչ է InheritedWidget-ը և ինչպես օգտագործել այն Flutter-ում։
sobes.tech AI
Պատասխան AI-ից
InheritedWidget — դա հատուկ տեսակի widget է Flutter-ում, որը թույլ է տալիս արդյունավետորեն տարածել տեղեկատվությունը դեպի ներքև՝ widget-ների ծառի վրա։ Այն օգտագործվում է տվյալներ և ծառայություններ տրամադրելու համար widget-ների ենթա ծառին՝ առանց անհրաժեշտության դրանք հստակ փոխանցելու յուրաքանչյուր միջնորդ widget-ի կոնստրուկտորների միջոցով:
Հիմնական առանձնահատկությունները՝
- Տվյալների արդյունավետ տարածում: Երբ փոխվում է InheritedWidget-ը, Flutter-ը ավտոմատ կերպով վերականգնում է միայն այն widget-ները, որոնք կախված են նրանից:
- Հեշտ հասանելիություն տվյալներին: Երեխա widget-ները կարող են ստանալ տվյալների հասանելիությունը
of()ստատիկ մեթոդի միջոցով: - Հետևողականության կառավարում:
updateShouldNotifyմեթոդը թույլ է տալիս վերահսկել, երբ պետք է վերականգնել կախված widget-ները:
Ինչպես օգտագործել InheritedWidget-ը:
-
Ստեղծել
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!; } // Կառավարում է, երբ պետք է տեղեկացնել կախված widget-ներին @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Հետեւողականություն՝ եթե տվյալները փոխվել են } } -
Տեղադրել
InheritedWidget-ը widget ծառի մեջ:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Օղակած է widget ծառը data: 'Բարեւ InheritedWidget-ից', child: MaterialApp( title: 'InheritedWidget Demo', home: Scaffold( appBar: AppBar( title: const Text('InheritedWidget Demo'), ), body: const Center( child: MyDependentWidget(), // Widget, որը կօգտագործի տվյալները ), ), ), ); } } -
Հասանելիություն ստանալ տվյալներին երեխա widget-ից:
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-ը հիմքն է շատ state management լուծումների՝ Provider, Bloc, համար։ Այն ապահովում է արդյունավետ և դեկլարատիվ եղանակ տվյալների փոխանակման համար widget ծառի մեջ։