Sobes.tech
Junior

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_model paketindən Model-dən genişlənməlidir.
  • ScopedModel: Ağacın bir hissəsini əhatə edən widget. Bu, Model nümunəsini qəbul edir və onu öz və övladlarına əlçatan edir.
  • ScopedModelDescendant: Bu, ən yaxın ScopedModel-dən Model nü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:

  1. 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
      }
    }
    
  2. Ağacın bir hissəsini ScopedModel ilə ə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(),
          ),
        );
      }
    }
    
  3. 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.