Flutter'da Scoped Model nima uchun ishlatiladi?
sobes.tech AI
AIdan javob
Scoped Model Flutterda ich ichiq vaqti boshqarish uchun InheritedWidget konseptsiyasiga asoslangan oddiy kutubxonadir. U ma'lumotlarga (modelga) kirishni ta'minlaydi va uni har bir darajadagi konstruktorlar orqali aniq o'tkazmasdan, daraxtdagi vidjetlarga kirish va ularni o'zgartirish imkonini beradi.
Scoped Model ning asosiy komponentlari:
- Model: Ma'lumotlar va biznes mantiqini saqlovchi sinf. U
scoped_modelpaketidanModelni kengaytirishi kerak. - ScopedModel: Vidjet, u vidjetlar daraxtining bir qismini o'z ichiga oladi. U
Modelning nusxasini oladi va uni o'ziga va uning vorislarga mavjud qiladi. - ScopedModelDescendant: Vidjet, u eng yaqin
ScopedModeldanModelnusxasiga kirishni ta'minlaydi va uning o'zgarishlariga obuna bo'ladi.
Scoped Model ni ishlatishning afzalliklari:
- Soddalik: Tushunarli va foydalanish oson, ayniqsa kichik va o'rta hajmdagi ilovalar uchun.
- Flutter ning standart mexanizmlariga asoslangan: InheritedWidget ni ishlatadi, bu uni samarali qiladi.
- Yaxshi hujjatlashtirilgan: To'liq hujjat va misollar mavjud.
Foydalanish misoli:
-
Model yaratish:
import 'package:scoped_model/scoped_model.dart'; class CounterModel extends Model { int _counter = 0; int get counter => _counter; void increment() { _counter++; notifyListeners(); // Vidjetlarga o'zgarishlar haqida xabar berish } } -
Modelning bir qismini
ScopedModelbilan o'rab olish:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // Modelni import qilish void main() { runApp( // Ilovamizni ScopedModel bilan o'rab olamiz 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 misoli')), body: Center( child: CounterDisplay(), ), floatingActionButton: IncrementButton(), ), ); } } -
ScopedModelDescendantichida modelga kirish:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // Modelni import qilish class CounterDisplay extends StatelessWidget { @override Widget build(BuildContext context) { // Modelga kirish va uning o'zgarishlariga obuna bo'lish 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) { // Modelga kirish, lekin o'zgarishlarga obuna bo'lmasdan return FloatingActionButton( onPressed: () { ScopedModel.of<CounterModel>(context).increment(); }, child: Icon(Icons.add), ); } }
Scoped Model, holat boshqaruvi juda murakkab bo'lmagan va BLoC yoki Riverpod kabi kuchliroq, ammo ko'proq yozuvli yechimlardan foydalanishni istamagan ilovalar uchun mos keladi. Biroq, katta va murakkab ilovalarda, ko'plab o'zaro bog'langan holatlarni boshqarish uchun yanada ilg'or yondashuvlar talab qilinishi mumkin.