CodeBlanks Logo Icon CodeBlanks

Meydan okuma 1

RenderBox ile sıfırdan düzen widget'ı yazarsın.

RenderBox ile sıfırdan düzen

RenderBox, Flutter'da düzen ve boyamadan sorumlu en düşük seviye nesnedir. performLayout metodunda size özelliğini ayarlarsın; paint metodunda Canvas üzerine çizersin. Bu iki metodu uygulayarak sıfırdan özel düzen widget'ı yazarsın.

class ColorBox extends RenderBox {
  final Color color;
  ColorBox({required this.color});

  @override
  void performLayout() {
    size = constraints.constrain(const Size(50, 50));
  }

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

Uygulama ColorBox RenderBox yaz

ColorBox adında RenderBox alt sınıfı yaz. color ve boxSize alanları olsun. performLayout metodunda size'ı constraints.constrain ile ayarla. paint metodunda köşe çiz. main içinde bir örnek oluştur ve color yazdır.

Başlangıç kodu

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

// ColorBox: RenderBox tabanlı sınıf
// color ve boxSize alanları
// Düzen metodunda boyutu kısıtlamalarla belirle
// Boyama metodunda tuvale köşe çiz

void main() {
  // ColorBox oluştur ve color yazdır
}

Örnek çözüm

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

class ColorBox extends RenderBox {
  final Color color;
  final double boxSize;
  ColorBox({required this.color, required this.boxSize});

  @override
  void performLayout() {
    size = constraints.constrain(Size(boxSize, boxSize));
  }

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

void main() {
  final box = ColorBox(color: const Color(0xFF0000FF), boxSize: 50);
  print(box.color);
}

Beklenen çıktı

Color(0xff0000ff)

Uygulama LeafRenderObjectWidget sarmalayıcı

ColorBox sınıfını tekrar yaz. Sonra ColorBoxWidget adında LeafRenderObjectWidget alt sınıfı yaz; color ve boxSize parametreleri alsın. createRenderObject metodu bir ColorBox döndürsün. main içinde bir ColorBoxWidget oluştur ve boxSize yazdır.

Başlangıç kodu

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

// ColorBox: RenderBox tabanlı (color ve boxSize)
// ColorBoxWidget: yaprak render widget'ı
// Render nesnesi üreten metodu ekle, ColorBox döndür

void main() {
  // ColorBoxWidget oluştur ve boxSize yazdır
}

Örnek çözüm

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

class ColorBox extends RenderBox {
  final Color color;
  final double boxSize;
  ColorBox({required this.color, required this.boxSize});

  @override
  void performLayout() {
    size = constraints.constrain(Size(boxSize, boxSize));
  }

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

class ColorBoxWidget extends LeafRenderObjectWidget {
  final Color color;
  final double boxSize;
  const ColorBoxWidget({
    super.key,
    required this.color,
    required this.boxSize,
  });

  @override
  RenderObject createRenderObject(BuildContext context) {
    return ColorBox(color: color, boxSize: boxSize);
  }
}

void main() {
  const w = ColorBoxWidget(color: Color(0xFF00FF00), boxSize: 100);
  print(w.boxSize);
}

Beklenen çıktı

100.0

Soru ve cevaplar

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

1 performLayout metodu ne yapar?

  • Ekrana çizim yapar
  • Dokunma olaylarını yakalar
  • RenderBox'ın size özelliğini ayarlar Doğru cevap
  • Widget ağacını oluşturur

Açıklama: performLayout, gelen constraints'e göre render box'ın size'ını belirler; paint ayrı bir metoddur.

2 size ataması

Soru
void performLayout() {
    ____ = constraints.constrain(const Size(50, 50));
  }
Cevap
void performLayout() {
    size = constraints.constrain(const Size(50, 50));
  }

Açıklama: performLayout içinde size özelliği ayarlanır; bu, render box'ın boyutunu belirler.

3 RenderBox parçaları

Kavram Anlamı
performLayout size özelliğini ayarlar
paint canvas üzerine çizer
constraints gelen düzen kısıtları
PaintingContext canvas sağlar

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