Creating a Flutter widget from scratch
A guide to building your own custom RenderObject
The normal way to create widgets in Flutter is through composition, which means combining several basic widgets into a more complex one. That’s not what this article is about, but if your not familiar with the concept, you can read more about it in Creating Reusable Custom Widgets in Flutter.
When the existing Flutter widgets can’t be combined in a way to match what you need, you can use a CustomPaint
widget to draw exactly what you want. Again, that’s not what this article is about, but you can see some good examples of it here and here.
When you browse the Flutter source code you’ll discover that the vast majority of widgets use neither composition nor CustomPaint
. Instead they use RenderObject
or or one of its subclasses, especially RenderBox
. Creating a custom widget in this way will give you the most flexibility in painting and sizing your widget — but also the most complexity, which is where this article comes in.
Are you sure you’re ready?
This article assumes you’re already familiar with render objects. If you’re not, you can start by reading Flutter Text Rendering, which includes an exploration of widgets, elements, and render objects.