CodeBlanks Logo Icon CodeBlanks

ProviderScope

ProviderScope ile kök sarmalama yapmayı öğrenirsin.

ProviderScope

ProviderScope, uygulamanın kökünü sarmalayan ve tüm provider'ların yaşam döngüsünü yöneten widget'tır. runApp çağrısının en dışında bulunur.

void main() {
  runApp(ProviderScope(child: MyApp()));
}

Her provider bu scope içinde yaşar.

Scope ve yaşam döngüsü

ProviderScope, içindeki tüm provider'ların yaşam döngüsünü yönetir. Uygulama kapatıldığında provider'lar dispose edilir. Birden fazla scope kullanılabilir; en yakın olan geçerli olur.

ProviderScope(
  overrides: [],
  child: MyApp(),
)

overrides ile provider'lar test için geçersiz kılınabilir.

Uygulama ProviderScope ile isim göster

isimP adında Provider<String> tanımla ve 'Riverpod' döndürsün. ProviderScope ile kökü sar. Ekrani ConsumerWidget'ında ref.watch(isimP) ile değeri al ve göster. main içinde print('başladı') çağır.

Başlangıç kodu

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

// isimP: Provider<String> 'Riverpod'

void main() {
  print('başladı');
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Ekrani());
  }
}

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

Örnek çözüm

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

final isimP = Provider<String>((ref) => 'Riverpod');

void main() {
  print('başladı');
  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Ekrani());
  }
}

class Ekrani extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final isim = ref.watch(isimP);
    return Scaffold(body: Center(child: Text(isim)));
  }
}

Beklenen çıktı

başladı

Soru ve cevaplar

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

1 ProviderScope ne zaman kullanılır?

  • Sadece StatelessWidget'larda
  • Yalnızca hata ayıklama modunda
  • Uygulamanın kökünde, runApp çağrısının en dışında Doğru cevap
  • Yalnızca test sırasında

Açıklama: ProviderScope runApp çağrısının en dışında bulunur ve tüm provider'ların yaşam döngüsünü yönetir.

2 ProviderScope'a overrides geç

Soru
void main() {
  runApp(ProviderScope(
    ____: [isimP.overrideWithValue('Test')],
    child: MyApp(),
  ));
}
Cevap
void main() {
  runApp(ProviderScope(
    overrides: [isimP.overrideWithValue('Test')],
    child: MyApp(),
  ));
}

Açıklama: ProviderScope'un overrides parametresi, test için provider'ları geçersiz kılmaya yarar.

3 ProviderScope parçaları

Kavram Anlamı
ProviderScope Uygulama kökünü sarmalayan widget
runApp Uygulamayı başlatan fonksiyon
overrides Test için provider'ları geçersiz kılar
scope Provider'ların yaşadığı ortam

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