CodeBlanks Logo Icon CodeBlanks

What is RenderObject?

Build a render object from scratch with RenderObject.

What is RenderObject?

RenderObject is the basic unit of drawing in Flutter; it computes size with layout and draws to the screen with paint. To write a custom render object from scratch, you extend RenderObject and override paintBounds and performLayout; paint is also added for drawing.

class MyRender extends RenderObject {
  @override
  Rect get paintBounds => Rect.zero;

  @override
  void performLayout() { /* size */ }

  @override
  void paint(PaintingContext context, Offset offset) { /* drawing */ }
}

Layout vs paint

layout determines the size using the constraints coming from the parent; paint performs drawing using the computed size. Layout always runs before paint.

Practice Define a RenderObject

Define MyRender as a RenderObject. Override paintBounds to return Rect.zero, and override performLayout and paint with empty bodies. In main, create a MyRender instance and print its runtimeType.

Starter code

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
}

Sample solution

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

Expected output

MyRender

Questions and answers

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

1 Which are overridden when extending RenderObject?

  • initState and build
  • createElement and mount
  • paintBounds and performLayout Correct answer
  • createState and dispose

Explanation: Since RenderObject is abstract, the paintBounds getter and performLayout method must be overridden; paint is optional.

2 Extend RenderObject

Question
class MyRender extends ____ {
Answer
class MyRender extends RenderObject {

Explanation: For a custom render object, RenderObject is extended; Widget is abstract definition, Element is the binder, and State is specific to StatefulWidget.

3 RenderObject matches

Term Meaning
RenderObject Drawing unit
layout Pre-draw measurement
paint Screen drawing
performLayout Layout trigger

All lessons in Expert