CodeBlanks Logo Icon CodeBlanks

Kompozisyon

Widget'ları iç içe geçirerek kompoze etmeyi öğrenirsin.

Kompozisyon nedir?

Kompozisyon, widget'ları iç içe geçirerek daha karmaşık arayüzler oluşturmaktır. Bir widget'ın child parametresi başka bir widget alır; böylece widget ağacı dallanır. Bu, Flutter'ın arayüz kurma felsefesinin temelidir.

class Cerceve extends StatelessWidget {
  final Widget child;
  const Cerceve({super.key, required this.child});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8),
      child: child,
    );
  }
}

Bu widget, kendisine verilen child'ı bir Padding ile sarar.

child parametresi

Birçok Flutter widget'ı child parametresi alır; bu parametre tek bir widget kabul eder. Column ve Row gibi bazı widget'lar ise children adında bir liste alır. child'ı kendi özel widget'ına parametre olarak eklemek, onu esnek bir sarmalayıcı yapar.

class Cerceve extends StatelessWidget {
  final Widget child;
  const Cerceve({super.key, required this.child});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(12),
      child: child,
    );
  }
}

Uygulama Cerceve widget'ı yaz

Cerceve adında bir StatelessWidget tanımla. final Widget child alanı olsun ve required ile kurucuya eklensin. build metodu Padding döndürsün; padding EdgeInsets.all(8) ve child parametresi de gelen child olsun. main içinde 'hazir' yazdır.

Başlangıç kodu

main.dart
import 'package:flutter/widgets.dart';

// Cerceve StatelessWidget tanımla
// final Widget child alanı olsun, required ile kurucuya ekle
// build metodu Padding döndürsün
// padding EdgeInsets.all(8), child gelen child olsun

void main() {
  // 'hazir' yazdır
}

Örnek çözüm

main.dart
import 'package:flutter/widgets.dart';

class Cerceve extends StatelessWidget {
  final Widget child;
  const Cerceve({super.key, required this.child});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8),
      child: child,
    );
  }
}

void main() {
  print('hazir');
}

Beklenen çıktı

hazir

Soru ve cevaplar

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

1 Kompozisyon neyi sağlar?

  • İç içe widget'larla karmaşık arayüzler kurmak Doğru cevap
  • Veritabanına veri yazmak
  • HTTP isteği atmak
  • JSON dizesini çözmek

Açıklama: Kompozisyon widget'ları iç içe geçirerek arayüz kurmayı sağlar. Veritabanı, HTTP ve JSON çözme kompozisyonla ilgili değildir; bunlar farklı katmanların işidir.

2 child parametresini ver

Soru
return Padding(
  padding: const EdgeInsets.all(8),
  ____,
);
Cevap
return Padding(
  padding: const EdgeInsets.all(8),
  child: child,
);

Açıklama: Padding bir child parametresi alır; children bir liste ister, widget ve body Padding'in parametre adları değildir.

3 Kompozisyon parçaları

Kavram Anlamı
child tek widget alır
children widget listesi alır
Padding iç boşluk bırakan sarmalayıcı
iç içe geçme widget ağacı dallanması

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