Flutter'da Scoped Model ne işe yarar?
sobes.tech yapay zeka
AI'dan gelen yanıt
Scoped Model, Flutter'da durumu yönetmek için InheritedWidget kavramına dayanan basit bir kütüphanedir. Veri (model) erişimini sağlar ve her seviyedeki yapıcılar aracılığıyla verileri açıkça iletmeye gerek kalmadan alt widget'lara erişim ve değiştirme imkanı sunar.
Scoped Model'in temel bileşenleri:
- Model: Veri ve iş mantığını tutan sınıf.
scoped_modelpaketindenModel'i genişletmelidir. - ScopedModel: Widget ağacının bir bölümünü saran widget. Bir
Modelörneği alır ve kendisi ile çocuklarına erişilebilir kılar. - ScopedModelDescendant: En yakın
ScopedModel'denModelörneğine erişim sağlar ve değişikliklere abone olur.
Scoped Model kullanmanın avantajları:
- Basitlik: Anlaşılması ve kullanımı kolaydır, özellikle küçük ve orta ölçekli uygulamalar için.
- Flutter'ın standart mekanizmalarına dayanır: InheritedWidget kullanır, bu da onu verimli kılar.
- İyi belgelenmiş: Kapsamlı dokümantasyon ve örnekler mevcuttur.
Kullanım örneği:
-
Model oluşturma:
import 'package:scoped_model/scoped_model.dart'; class CounterModel extends Model { int _counter = 0; int get counter => _counter; void increment() { _counter++; notifyListeners(); // Widget'lara değişiklikleri bildirir } } -
Model'in bir kısmını
ScopedModelile sarmalama:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // Model'i içe aktar void main() { runApp( // Uygulamamızı ScopedModel ile sarmalıyoruz 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 Örneği')), body: Center( child: CounterDisplay(), ), floatingActionButton: IncrementButton(), ), ); } } -
ScopedModelDescendantiçinde modele erişim:import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'counter_model.dart'; // Model'i içe aktar class CounterDisplay extends StatelessWidget { @override Widget build(BuildContext context) { // Model'e erişir ve değişikliklere abone 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'e erişir ama değişikliklere abone olmaz return FloatingActionButton( onPressed: () { ScopedModel.of<CounterModel>(context).increment(); }, child: Icon(Icons.add), ); } }
Scoped Model, durum yönetiminin çok karmaşık olmadığı ve BLoC veya Riverpod gibi daha güçlü ama daha uzun çözümlerden kaçınılabileceği uygulamalar için uygundur. Ancak, büyük ve karmaşık uygulamalarda, birçok ilişkili durumu yönetmek için daha gelişmiş yaklaşımlar gerekebilir.