Flutter aims to provide the best possible tools for the developer to construct application user interfaces with no limitations. By now, you are probably already convinced of this, with the numerous widgets it provides, the facility of extending those widgets, and the universe of possibilities that the framework offers.
The simplicity that Flutter brings to the UI composition does not end with widgets. How about changing the widget look? I'm not talking about extending with a Transform widget by translating or rotating it. We can create a widget with its own unique appearance, its own shape, and its own behaviors. That is possible with the help of three main classes: CustomPaint, CustomPainter, and Canvas.