CodeBlanks Logo Icon CodeBlanks

Özet - Özel render

RenderBox, performLayout ve paint'i birleştirerek özel widget yaparsın.

Özet - Özel render

Bir özel render widget yapmak için üç parça birleşir: RenderBox'ı extend et, performLayout ile boyut hesapla, paint ile çiz. Bu üçü birlikte Flutter'ın render sistemine özel bir nesne kazandırır.

class ColorBox extends RenderBox {
  @override
  void performLayout() {
    size = constraints.biggest;
  }

  @override
  void paint(PaintingContext context, Offset offset) {
    context.canvas.drawRect(
      offset & size,
      Paint()..color = Colors.green,
    );
  }
}

Uygulama ColorBox tanımla

ColorBox adında bir RenderBox tanımla. performLayout'ta size = constraints.biggest ata. paint'te context.canvas.drawRect(offset & size, Paint()..color = Colors.green) çağır. main'de ColorBox örneği al, runtimeType yazdır.

Başlangıç kodu

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

// ColorBox sınıfını RenderBox olarak tanımla
// performLayout'ta size'ı constraints biggest ata
// paint'te context.canvas ile yeşil bir dikdörtgen çiz (offset & size)

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

Örnek çözüm

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

class ColorBox extends RenderBox {
  @override
  void performLayout() {
    size = constraints.biggest;
  }

  @override
  void paint(PaintingContext context, Offset offset) {
    context.canvas.drawRect(
      offset & size,
      Paint()..color = Colors.green,
    );
  }
}

void main() {
  final box = ColorBox();
  print(box.runtimeType);
}

Beklenen çıktı

ColorBox

Soru ve cevaplar

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

1 Özel render nesnesi yazmak için hangi üç bileşen birleşir?

  • State + setState + build
  • Navigator + Route + MaterialPageRoute
  • RenderBox + performLayout + paint Doğru cevap
  • Widget + Element + BuildContext

Açıklama: Özel render nesnesi RenderBox'ı extend edip performLayout ile boyut hesaplayıp paint ile çizerek yapılır; Widget/Element/BuildContext ağaç kavramlarıdır.

2 drawRect çağrısı

Soru
context.canvas.____(offset & size, paint);
Cevap
context.canvas.drawRect(offset & size, paint);

Açıklama: Bir dikdörtgen için drawRect kullanılır; drawCircle daire, drawLine çizgi, drawPath ise çoklu şekil için çağrılır.

3 Özel render özet eşleşmeleri

Kavram Anlamı
RenderBox Özel render nesnesi
performLayout Layout adımı
paint Çizim adımı
Canvas Çizim aracı

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