Sobes.tech
Junior

Kam paredzēts Scoped Model Flutter?

sobes.tech AI

Atbilde no AI

Scoped Model ir Flutter vienkārša bibliotēka stāvokļa pārvaldībai, kas balstīta uz InheritedWidget koncepciju. Tā paredzēta piekļuves nodrošināšanai datiem (modelim) un to maiņas iespēju widgetu koka apakšā bez nepieciešamības skaidri nodot datus caur konstruktoru katrā līmenī.

Scoped Model galvenie komponenti:

  • Modelis: Klase, kas glabā datus un biznesa loģiku. Tā ir jāpaplašina no Model no scoped_model pakotnes.
  • ScopedModel: Widget, kas ietver daļu no widgetu koka. Tas pieņem Model eksemplāru un padara to pieejamu sev un saviem pēcnācējiem.
  • ScopedModelDescendant: Widget, kas ļauj piekļūt Model eksemplāram no tuvākā ScopedModel augšpusē kokā un abonēt tā izmaiņas.

Scoped Model priekšrocības:

  • Vienkāršība: viegli saprotams un lietojams, īpaši mazākās un vidējās lietojumprogrammās.
  • Balstīts uz Flutter standarta mehānismiem: izmanto InheritedWidget, kas padara to efektīvu.
  • Labi dokumentēts: ir pieejama detalizēta dokumentācija un piemēri.

Piemērs lietošanai:

  1. Izveidot modeli:

    import 'package:scoped_model/scoped_model.dart';
    
    class CounterModel extends Model {
      int _counter = 0;
    
      int get counter => _counter;
    
      void increment() {
        _counter++;
        notifyListeners(); // paziņojam widgetiem par izmaiņām
      }
    }
    
  2. Ietvert daļu no koka ScopedModel:

    import 'package:flutter/material.dart';
    import 'package:scoped_model/scoped_model.dart';
    import 'counter_model.dart'; // modeļa imports
    
    void main() {
      runApp(
        // ietveram mūsu lietotni `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 piemērs')),
            body: Center(
              child: CounterDisplay(),
            ),
            floatingActionButton: IncrementButton(),
          ),
        );
      }
    }
    
  3. Pieejas iegūšana modelim ScopedModelDescendant:

    import 'package:flutter/material.dart';
    import 'package:scoped_model/scoped_model.dart';
    import 'counter_model.dart'; // modeļa imports
    
    class CounterDisplay extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // piekļuve modelim un tā izmaiņu abonēšana
        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) {
        // piekļuve modelim bez abonēšanas
        return FloatingActionButton(
          onPressed: () {
            ScopedModel.of<CounterModel>(context).increment();
          },
          child: Icon(Icons.add),
        );
      }
    }
    

Scoped Model ir piemērots lietojumprogrammām, kurās stāvokļa pārvaldība nav pārāk sarežģīta un kur var izmantot vienkāršākus risinājumus, piemēram, BLoC vai Riverpod. Tomēr lielākām un sarežģītākām programmām ar daudzām savstarpēji saistītām stāvokļa daļām var būt nepieciešami progresīvāki pieejas veidi.