CodeBlanks Logo Icon CodeBlanks

RenderObject nedir?

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

main.dart
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

main.dart
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

Soru
class MyRender extends ____ {
Cevap
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

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