CodeBlanks Logo Icon CodeBlanks

performLayout

performLayout ile çocukları yerleştirmeyi öğrenirsin.

performLayout

performLayout, render nesnesinin boyutunu ve child'larının konumunu hesaplayan metoddur. Ebeveynden gelen constraints'i kullanarak layout yapar; child.layout(constraints) ile çocuklara dağıtır.

@override
void performLayout() {
  size = constraints.biggest;
  if (child != null) {
    child!.layout(constraints);
  }
}

parentUsesSize

child.layout(constraints, parentUsesSize: true) çağrıldığında ebeveyn çocuğun boyutunu okuyabilir. Eğer parentUsesSize: false ise ebeveyn çocuğun boyutuna bağlı değildir; bu, ek optimizasyon sağlar.

Uygulama Çocuklu RenderBox tanımla

MyContainer adında bir RenderBox tanımla; RenderObjectWithChildMixin<RenderBox> mixin'ini ekle. performLayout'ta size = constraints.biggest ata ve child?.layout(constraints, parentUsesSize: true) çağır. main'de MyContainer örneği al ve runtimeType yazdır.

Başlangıç kodu

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

// MyContainer sınıfını RenderBox with RenderObjectWithChildMixin<RenderBox> olarak tanımla
// performLayout'ta size'ı constraints biggest ata ve child varsa layout et

void main() {
  // MyContainer örneği al ve runtimeType yazdır
}

Örnek çözüm

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

class MyContainer extends RenderBox with RenderObjectWithChildMixin<RenderBox> {
  @override
  void performLayout() {
    size = constraints.biggest;
    child?.layout(constraints, parentUsesSize: true);
  }
}

void main() {
  final container = MyContainer();
  print(container.runtimeType);
}

Beklenen çıktı

MyContainer

Soru ve cevaplar

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

1 child.layout ne yapar?

  • Çocuğu çizer
  • Çocuğu siler
  • Çocuğa constraints gönderir ve layout yapmasını sağlar Doğru cevap
  • Çocuğun rengini ayarlar

Açıklama: child.layout(constraints), çocuğun performLayout'ını tetikleyerek ebeveynden gelen sınırları çocuğa iletir; çizim veya renk ile ilgilenmez.

2 child.layout çağrısı

Soru
child!.layout(____, parentUsesSize: true);
Cevap
child!.layout(constraints, parentUsesSize: true);

Açıklama: child.layout bir BoxConstraints bekler; size bir Size, paint bir Paint, bounds ise geçerli bir parametre adı değildir.

3 performLayout eşleşmeleri

Kavram Anlamı
performLayout Boyut ve konum hesaplar
layout Çocuğa constraints dağıtır
child Alt render nesnesi
parentUsesSize Ebeveyn çocuğu okur

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