DEV Community

Cover image for How I achieved 120 FPS for complex dashboards in Flutter using pure math and CustomPainter
Cavid Haciyev
Cavid Haciyev

Posted on

How I achieved 120 FPS for complex dashboards in Flutter using pure math and CustomPainter

Beyond Standard Widgets: The Power of CustomPainter

Most Flutter developers rely on heavy charting libraries. While they are great for simple use cases, they often become a bottleneck when you need to animate multiple complex gauges simultaneously.

I spent the last few weeks pushing Flutter's rendering limits to build a dashboard that stays at a butter-smooth 120 FPS without any external dependencies.


3 Technical Insights from building 14 Premium Components

1. Trigonometry over Transformation

Instead of nesting Transform.rotate widgets (which adds overhead to the widget tree and complicates hit testing), I moved all logic into the paint() method. Calculating offsets using cos and sin directly on the canvas keeps the rendering pipeline lean.

2. Mastering RepaintBoundary

A common mistake is wrapping the entire dashboard in one boundary. I implemented a strategy where each dynamic component has its own RepaintBoundary. This prevents a single animating needle from triggering a repaint of the static background or other gauges.

3. Memory & Raster Optimization

Using Flutter DevTools, I tracked down raster cache issues. By pre-calculating Path objects and avoiding saveLayer() calls, I managed to reduce the frame time significantly, even on mid-range Android devices.


The Result: A Premium UI Kit

I’ve documented the math and logic behind these 14 components. If you want to see how a "Senior-level" custom rendering is implemented or save 40+ hours of development time, you can check out the full source code.

What’s inside:

  • 12 Main Components (Advanced charts, valuation gauges, dynamic indicators).
  • 2 Exclusive Bonuses (Segmented Progress Bar & Glassmorphic Card).
  • 100% Pure Dart & CustomPainter.

🎁 Open Source Sample: The Gauge Meter Logic

I want to be transparent about the quality of the code in this kit. Below is a functional sample of the Gauge Meter component. It demonstrates how I use trigonometry to calculate tick positions and needles without adding extra widgets to the tree.


By studying this sample, you can see the performance-first approach I took for all 14 components in the kit.

πŸ‘‰ Get the Premium Flutter Custom Graphics Kit on Gumroad


I’d love to hear your thoughts! How often do you reach for CustomPainter instead of a package? Let's discuss performance optimization in the comments!

flutter #dart #mobiledev #programming

Top comments (1)

Collapse
 
jaweedg profile image
Cavid Haciyev

Which component from the video looks the most challenging to implement? I'm thinking of writing a deep dive on the circular gauge math.