CodeBlanks Logo Icon CodeBlanks

ChangeNotifierProvider

ChangeNotifierProvider ile modeli ağaca sağlamayı öğrenirsin.

ChangeNotifierProvider

ChangeNotifierProvider, bir ChangeNotifier modelini widget ağacına sağlar. create parametresi modeli üreten fonksiyonu alır ve model otomatik olarak yönetilir.

ChangeNotifierProvider<SayacModeli>(
  create: (_) => SayacModeli(),
  child: MaterialApp(home: Ekrani()),
)

Model, ağaçtan çıktığında otomatik dispose edilir.

create ve child

create, provider ilk kez ihtiyaç duyulduğunda çağrılır ve ChangeNotifier örneğini döndürür. child ise provider'ın altındaki widget ağacıdır.

ChangeNotifierProvider<SayacModeli>(
  create: (_) => SayacModeli(),
  child: Ekrani(),
)

Modelin yaşam döngüsü provider tarafından yönetilir.

Uygulama ChangeNotifierProvider ile model sağla

ChangeNotifierProvider<SayacModeli> ile modeli ağaca sağla. create ile yeni SayacModeli() örneği oluştur. main içinde print('uygulama açıldı') çağır.

Başlangıç kodu

main.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() {
  print('uygulama açıldı');
  runApp(MyApp());
}

class SayacModeli extends ChangeNotifier {
  int deger = 0;
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // ChangeNotifierProvider ile SayacModeli sağla
    return MaterialApp(
      home: Ekrani(),
    );
  }
}

class Ekrani extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(child: Text('ekran')),
    );
  }
}

Örnek çözüm

main.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() {
  print('uygulama açıldı');
  runApp(MyApp());
}

class SayacModeli extends ChangeNotifier {
  int deger = 0;
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<SayacModeli>(
      create: (_) => SayacModeli(),
      child: MaterialApp(
        home: Ekrani(),
      ),
    );
  }
}

class Ekrani extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(child: Text('ekran')),
    );
  }
}

Beklenen çıktı

uygulama açıldı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 ChangeNotifierProvider'ın create parametresi ne yapar?

  • Modeli üreten fonksiyonu tanımlar Doğru cevap
  • Hot reload tetikler
  • Yalnızca widget'ı boyar
  • Uygulamayı yeniden başlatır

Açıklama: create parametresi, ChangeNotifierProvider ilk kez ihtiyaç duyulduğunda model örneğini üreten fonksiyonu alır.

2 ChangeNotifierProvider'ın create'ini tamamla

Soru
ChangeNotifierProvider<SayacModeli>(
  ____: (_) => SayacModeli(),
  child: Ekrani(),
)
Cevap
ChangeNotifierProvider<SayacModeli>(
  create: (_) => SayacModeli(),
  child: Ekrani(),
)

Açıklama: ChangeNotifierProvider'ın create parametresi, model örneğini üreten fonksiyonu alır.

3 ChangeNotifierProvider parçaları

Kavram Anlamı
ChangeNotifierProvider ChangeNotifier'ı ağaca sağlayan widget
create Model örneğini üreten fonksiyon
child Provider'ın altındaki widget ağacı
dispose Model ağaçtan çıkınca çağrılır

Orta seviye bölümündeki tüm dersler