Ի՞նչ նպատակով է օգտագործվում Scoped Model-ը Flutter-ում։
sobes.tech AI
Պատասխան AI-ից
Scoped Model-ը պարզ գրադարան է Flutter-ում վիճակի կառավարման համար, որը հիմնված է InheritedWidget կոնցեպտի վրա: Այն տրամադրում է տվյալների (մոդելի) հասանելիություն և նրանց փոփոխության հնարավորությունը widget-ներին ենթաբաղադրամասում՝ առանց անհրաժեշտության բացահայտ փոխանցելու տվյալները կոնստրուկտորների միջոցով յուրաքանչյուր մակարդակում:
Scoped Model-ի հիմնական բաղադրիչները՝
- Model: Կլաս, որը պահում է տվյալները և բիզնես-լոգիկան: Նա պետք է ընդլայնի
Model-ըscoped_modelփաթեթից: - ScopedModel: Widget, որը շրջապատում է ծառի մի մասը: Նա ընդունում է
Model-ի օրինակ և դարձնում այն հասանելի իր և իր ժառանգների համար: - ScopedModelDescendant: Widget, որը թույլ է տալիս ստանալ մոտակա
ScopedModel-իցModel-ի օրինակ և գրանցվել նրա փոփոխությունների համար:
Scoped Model-ի օգտագործման առավելությունները՝
- Պարզություն: Հասկանալի և հեշտ օգտագործել, հատկապես փոքր և միջին հավելվածների համար:
- Հիմնված է Flutter-ի ստանդարտ մեխանիզմների վրա: Օգտագործում է InheritedWidget-ը, ինչը դարձնում է արդյունավետ:
- Լավ փաստաթղթավորված: Կան մանրամասն փաստաթղթեր և օրինակներ:
Օգտագործման օրինակ՝
-
Մոդել ստեղծել:
import 'package:scoped_model/scoped_model.dart'; class CounterModel extends Model { int _counter = 0; int get counter => _counter; void increment() { _counter++; notifyListeners(); // Հաղորդում է widget-ներին փոփոխության մասին } } -
Մոտակա
ScopedModel-ով շրջապատել ծառի մի մասը:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // Մոդելի ներմուծում void main() { runApp( // Մեր հավելվածը շրջապատել `ScopedModel`-ով ScopedModel<CounterModel>( model: CounterModel(), child: MyApp(), ), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('Scoped Model Example')), body: Center( child: CounterDisplay(), ), floatingActionButton: IncrementButton(), ), ); } } -
Մուտք գործել մոդել
ScopedModelDescendant-ով:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // Մոդելի ներմուծում class CounterDisplay extends StatelessWidget { @override Widget build(BuildContext context) { // Մուտք գործել մոդել և գրանցվել նրա փոփոխությունների համար return ScopedModelDescendant<CounterModel>( builder: (context, child, model) { return Text( 'Counter: ${model.counter}', style: Theme.of(context).textTheme.headline4, ); }, ); } } class IncrementButton extends StatelessWidget { @override Widget build(BuildContext context) { // Մուտք գործել մոդել առանց փոփոխությունների գրանցման return FloatingActionButton( onPressed: () { ScopedModel.of<CounterModel>(context).increment(); }, child: Icon(Icons.add), ); } }
Scoped Model-ը հարմար է այն հավելվածների համար, որտեղ վիճակի կառավարումը շատ բարդ չէ և կարելի է խուսափել ավելի հզոր, բայց և ավելի շատ բառեր պահանջող լուծումներից՝ ինչպիսիք են BLoC կամ Riverpod: Սակայն մեծ և բարդ հավելվածների համար, որտեղ շատ փոխկապակցված վիճակներ կան, կարող են անհրաժեշտ լինել ավելի առաջադեմ մոտեցումներ։