Sobes.tech
Junior

Flutterде Scoped Model эмне үчүн колдонулат?

sobes.tech AI

AIден жооп

Scoped Model — бул Flutterдеги абал башкаруу үчүн жөнөкөй китепкана, ал InheritedWidget концепциясына негизделген. Ал маалыматтарга (модель) жетүү жана алардын өзгөртүлүшүнө мүмкүнчүлүк берет, жана бул ар бир деңгээлдеги куруучулар аркылуу маалыматтарды ачык өткөрбөстөн, widgetтердин ичиндеги бөлүмдөргө жеткиликтүү кылат.

Scoped Modelдин негизги компоненттери:

  • Model: Маалыматтарды жана бизнес логиканы сактайт. Ал scoped_model пакетинен Model кеңейтүүсү керек.
  • ScopedModel: Widget, ал бөлүмдү каптайт. Ал Model экземплярын кабыл алып, аны өзү жана анын мураскорлору үчүн жеткиликтүү кылат.
  • ScopedModelDescendant: Бул widget, ал эң жакын турган ScopedModel аркылуу Model экземплярга жетүүгө жана анын өзгөрүүлөрүнө жазылууга мүмкүндүк берет.

Scoped Model колдонуу артыкчылыктары:

  • Жөнөкөйлүк: Түшүнүү жана колдонуу оңой, өзгөчө кичинекей жана орто көлөмдөгү колдонмолор үчүн.
  • Flutterдин стандарттык механизмдерине негизделген: InheritedWidget колдонулат, бул анын иштөөчөндүгүн жогорулатат.
  • Толук документтелген: Толук документация жана мисалдар бар.

Колдонуу мисалы:

  1. Модель түзүү:

    import 'package:scoped_model/scoped_model.dart';
    
    class CounterModel extends Model {
      int _counter = 0;
    
      int get counter => _counter;
    
      void increment() {
        _counter++;
        notifyListeners(); // Widgetтерге өзгөрүү тууралуу кабар берет
      }
    }
    
  2. Даракты 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(),
          ),
        );
      }
    }
    
  3. 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 сыяктуу күчтүү, бирок көбүрөөк сөз талап кылган чечимдерден баш тартууга болот деген колдонмолор үчүн ылайыктуу. Бирок, чоң жана татаал колдонмолор үчүн, көптөгөн өз ара байланышкан абалдар менен, өнүккөн ыкмалар талап кылышы мүмкүн.