performLayout
- Flutter kursu
- Uzman seviye
- Ders 13/39
- 4 dk
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
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
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ı
child!.layout(____, parentUsesSize: true);
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 |