RenderObject nedir?
- Flutter kursu
- Uzman seviye
- Ders 11/39
- 4 dk
RenderObject ile sıfırdan render nesnesi yazmayı öğrenirsin.
RenderObject nedir?
RenderObject, Flutter'da çizimin temel birimidir; layout ile boyut hesaplar, paint ile ekrana çizer. Sıfırdan özel render nesnesi yazmak için RenderObject'i extend eder, paintBounds ve performLayout'ü override edersin; paint de çizim için eklenir.
class MyRender extends RenderObject {
@override
Rect get paintBounds => Rect.zero;
@override
void performLayout() { /* boyut */ }
@override
void paint(PaintingContext context, Offset offset) { /* çizim */ }
}Layout ve paint farkı
layout, ebeveynden gelen constraints'i kullanarak boyutu belirler; paint ise hesaplanan boyutu kullanarak çizim yapar. Layout her zaman paint'ten önce çalışır.
Uygulama RenderObject tanımla
MyRender adında bir RenderObject tanımla. paintBounds getter'ını Rect.zero dönecek şekilde, performLayout ve paint metodlarını boş gövdeyle override et. main'de MyRender örneği al ve runtimeType yazdır.
Başlangıç kodu
import 'package:flutter/rendering.dart';
// MyRender sınıfını RenderObject olarak tanımla
// gerekli getter ve metodları override et (paint bounds, layout, paint)
void main() {
// MyRender örneği al ve runtimeType yazdır
}Örnek çözüm
import 'package:flutter/rendering.dart';
class MyRender extends RenderObject {
@override
Rect get paintBounds => Rect.zero;
@override
void performLayout() {
// layout
}
@override
void paint(PaintingContext context, Offset offset) {
// paint
}
}
void main() {
final render = MyRender();
print(render.runtimeType);
}Beklenen çıktı
MyRender
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 RenderObject'i extend ederken hangileri override edilir?
- initState ve build
- createElement ve mount
- paintBounds ve performLayout Doğru cevap
- createState ve dispose
Açıklama: RenderObject abstract olduğundan paintBounds getter'ı ve performLayout metodu override edilmelidir; paint isteğe bağlıdır.
2 RenderObject extend et
class MyRender extends ____ {
class MyRender extends RenderObject {
Açıklama: Sıfırdan render nesnesi için RenderObject extend edilir; Widget soyut tanım, Element bağlayıcı, State ise StatefulWidget'a özeldir.
3 RenderObject eşleşmeleri
| Kavram | Anlamı |
|---|---|
RenderObject |
Çizim birimi |
layout |
Çizim öncesi ölçüm |
paint |
Ekran çizimi |
performLayout |
Layout tetikleyici |