CodeBlanks Logo Icon CodeBlanks

BlocProvider

BlocProvider ile Cubit'i ağaca sağlamayı öğrenirsin.

BlocProvider

BlocProvider, bir Cubit veya Bloc'u widget ağacına sağlar. create parametresi Cubit örneğini üreten fonksiyonu alır.

BlocProvider<SayacCubit>(
  create: (_) => SayacCubit(),
  child: Ekrani(),
)

Cubit, ağaçtan çıkınca otomatik kapatılır.

create ve child

create BlocProvider ilk kez ihtiyaç duyulduğunda çağrılır. child ise provider'ın altındaki widget ağacıdır.

BlocProvider<SayacCubit>(
  create: (_) => SayacCubit(),
  child: MaterialApp(home: Ekrani()),
)

Cubit'in yaşam döngüsü provider tarafından yönetilir.

Uygulama BlocProvider ile Cubit sağla

BlocProvider<SayacCubit> ile Cubit'i ağaca sağla. create ile yeni SayacCubit() örneği oluştur. main içinde print('uygulama başladı') çağır.

Başlangıç kodu

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

class SayacCubit extends Cubit<int> {
  SayacCubit() : super(0);
}

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // BlocProvider ile SayacCubit 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:flutter_bloc/flutter_bloc.dart';

class SayacCubit extends Cubit<int> {
  SayacCubit() : super(0);
}

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

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

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

Beklenen çıktı

uygulama başladı

Soru ve cevaplar

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

1 BlocProvider'ın create'i ne zaman çağrılır?

  • Uygulama kapandığında
  • Her build sırasında
  • BlocProvider ilk kez ihtiyaç duyulduğunda Doğru cevap
  • Yalnızca hata durumunda

Açıklama: BlocProvider'ın create fonksiyonu, provider ilk kez ihtiyaç duyulduğunda çağrılır ve Cubit örneğini üretir.

2 BlocProvider'a Cubit tipini ver

Soru
BlocProvider<____>(
  create: (_) => SayacCubit(),
  child: Ekrani(),
)
Cevap
BlocProvider<SayacCubit>(
  create: (_) => SayacCubit(),
  child: Ekrani(),
)

Açıklama: BlocProvider'ın tip parametresi sağlanan Cubit sınıfıdır; SayacEvent veya SayacState değil.

3 BlocProvider parçaları

Kavram Anlamı
BlocProvider Cubit'i ağaca sağlar
create İlk ihtiyaçta Cubit üretir
child Provider'ın alt widget ağacı
close Cubit dispose edilince çağrılır

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