Milleks kasutatakse Scoped Modeli Flutteris?
sobes.tech AI
Vastus AI-lt
Scoped Model on lihtne raamatukogu Flutteri oleku haldamiseks, mis põhineb InheritedWidget kontseptsioonil. Selle eesmärk on pakkuda juurdepääsu andmetele (mudelile) ning võimalust neid muuta vidinates puu allosas ilma, et peaks iga taseme puhul andmeid selgelt konstruktorite kaudu edasi andma.
Scoped Modeli põhikomponendid:
- Model: Klass, mis hoiab andmeid ja äriloogikat. Selle peab laiendama
Model-istscoped_modelpaketist. - ScopedModel: Vidin, mis ümbritseb osa vidinate puust. See võtab vastu
Modeleksemplari ning teeb selle kättesaadavaks endale ja oma järeltulijatele. - ScopedModelDescendant: Vidin, mis võimaldab saada juurdepääsu
Modeleksemplarile lähimaScopedModel-i kaudu puu kõrgemal ning tellida selle muudatusi.
Scoped Modeli eelised:
- Lihtne kasutada: kergesti mõistetav ja kasutatav, eriti väikestes ja keskmise suurusega rakendustes.
- Põhineb Flutteri standardmehhanismidel: kasutab InheritedWidget-i, mis muudab selle tõhusaks.
- Hea dokumentatsioon: saadaval põhjalik dokumentatsioon ja näited.
Kasutusnäide:
-
Luua mudel:
import 'package:scoped_model/scoped_model.dart'; class CounterModel extends Model { int _counter = 0; int get counter => _counter; void increment() { _counter++; notifyListeners(); // teavitame vidinaid muudatusest } } -
Ümber puu osa
ScopedModel-iga:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // mudeli import void main() { runApp( // ümber meie rakenduse `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 näide')), body: Center( child: CounterDisplay(), ), floatingActionButton: IncrementButton(), ), ); } } -
Saada juurdepääs mudelile
ScopedModelDescendant-iga:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // mudeli import class CounterDisplay extends StatelessWidget { @override Widget build(BuildContext context) { // juurdepääs mudelile ja selle muudatuste jälgimine 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) { // juurdepääs mudelile ilma jälgimiseta return FloatingActionButton( onPressed: () { ScopedModel.of<CounterModel>(context).increment(); }, child: Icon(Icons.add), ); } }
Scoped Model sobib hästi rakendustele, kus oleku haldamine ei ole liiga keeruline ning saab kasutada lihtsamaid lahendusi, nagu BLoC või Riverpod. Kuid suurte ja keerukate rakenduste puhul, kus on palju omavahel seotud oleku osi, võib olla vaja kasutada arenenumaid lähenemisviise.