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
Modelnoscoped_modelpakotnes. - ScopedModel: Widget, kas ietver daļu no widgetu koka. Tas pieņem
Modeleksemplāru un padara to pieejamu sev un saviem pēcnācējiem. - ScopedModelDescendant: Widget, kas ļauj piekļūt
Modeleksemplāram no tuvākāScopedModelaugš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:
-
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 } } -
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(), ), ); } } -
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.