CodeBlanks Logo Icon CodeBlanks

Summary - Custom render

Combine RenderBox, performLayout and paint to make a custom widget.

Summary - Custom render

To build a custom render widget, three pieces come together: extend RenderBox, compute size with performLayout, and draw with paint. Together they give Flutter's render system a custom object.

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,
    );
  }
}

Practice Define ColorBox

Define ColorBox as a RenderBox. In performLayout, set size = constraints.biggest. In paint, call context.canvas.drawRect(offset & size, Paint()..color = Colors.green). In main, create a ColorBox instance and print its runtimeType.

Starter code

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
}

Sample solution

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);
}

Expected output

ColorBox

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

1 Which three components come together to write a custom render object?

  • State + setState + build
  • Navigator + Route + MaterialPageRoute
  • RenderBox + performLayout + paint Correct answer
  • Widget + Element + BuildContext

Explanation: A custom render object is made by extending RenderBox, computing size with performLayout, and drawing with paint; Widget/Element/BuildContext are tree concepts.

2 drawRect call

Question
context.canvas.____(offset & size, paint);
Answer
context.canvas.drawRect(offset & size, paint);

Explanation: For a rectangle, drawRect is used; drawCircle is for a circle, drawLine for a line, and drawPath for multi-segment shapes.

3 Custom render summary matches

Term Meaning
RenderBox Custom render object
performLayout Layout step
paint Paint step
Canvas Drawing tool

All lessons in Expert