Flutter-də Scoped Model nə üçün istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
Scoped Model - Flutter-də vəziyyət idarəetməsi üçün sadə kitabxanadır və InheritedWidget konsepsiyasına əsaslanır. Bu, məlumatlara (modelə) çıxış və onların dəyişdirilməsi imkanını verir və bu, hər səviyyədə konstruktorlar vasitəsilə məlumatların açıq şəkildə ötürülməsinə ehtiyac olmadan, alt ağac widgetlərinə təqdim edir.
Scoped Model-in əsas komponentləri:
- Model: Məlumatları və biznes məntiqini saxlayan sinif. Bu,
scoped_modelpaketindənModel-dən genişlənməlidir. - ScopedModel: Ağacın bir hissəsini əhatə edən widget. Bu,
Modelnümunəsini qəbul edir və onu öz və övladlarına əlçatan edir. - ScopedModelDescendant: Bu, ən yaxın
ScopedModel-dənModelnümunəsinə çıxış əldə etməyə və onun dəyişikliklərinə abunə olmağa imkan verən widget.
Scoped Model istifadə etmənin üstünlükləri:
- Sadəlik: Anlamaq və istifadə etmək asandır, xüsusən kiçik və orta ölçülü tətbiqlər üçün.
- Flutter-in standart mexanizmlərinə əsaslanır: InheritedWidget istifadə edir, bu da onun performansını artırır.
- Əla sənədləşdirilib: Ətraflı sənədlər və nümunələr mövcuddur.
İstifadə nümunəsi:
-
Model yaratmaq:
import 'package:scoped_model/scoped_model.dart'; class CounterModel extends Model { int _counter = 0; int get counter => _counter; void increment() { _counter++; notifyListeners(); // Widget-lərə dəyişiklik barədə xəbərdar edir } } -
Ağacın bir hissəsini
ScopedModelilə əhatə etmək:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // Modeli idxal edir void main() { runApp( // Tətbiqimizi ScopedModel ilə əhatə edirik 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-də modelə çıxış əldə etmək:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // Modeli idxal edir class CounterDisplay extends StatelessWidget { @override Widget build(BuildContext context) { // Modelə çıxış əldə edir və onun dəyişikliklərinə abunə olur 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) { // Modelə çıxış əldə edir, amma dəyişikliklərə abunə olmur return FloatingActionButton( onPressed: () { ScopedModel.of<CounterModel>(context).increment(); }, child: Icon(Icons.add), ); } }
Scoped Model, vəziyyət idarəetməsi çox mürəkkəb olmayan və BLoC və ya Riverpod kimi daha güclü, lakin daha çox söz tələb edən həllər olmadan istifadə edilə bilən tətbiqlər üçün uyğundur. Ancaq böyük və mürəkkəb tətbiqlər üçün, çox sayda qarşılıqlı əlaqəli vəziyyətlərlə, daha inkişaf etmiş yanaşmalar tələb oluna bilər.