16.6
milliseconds per frame

That is the entire budget for sixty frames a second. Everything on this page is about spending it well on the phone your users actually own.

Flutter Developer

Smooth on the flagship
is not the test.
Smooth on a three-year-old Android is.

Our Flutter engineers profile in release mode on real mid-range hardware, not in a simulator. They work full-time in your team and stay on the Virtus payroll.

$26–46
per hour
6–10 days
to day one
1 month
minimum
Where the budget goes

Four phases, and the mistake that blows each one

A busy list screen on a mid-range Android, traced in profile mode. Total 15.8 ms — comfortably inside budget, but only because someone did the work in the right-hand column.

Build

4.1 ms
What blows it

setState at the top of the tree, so every widget below rebuilds for a change that affected one row.

What ours does

State scoped with Riverpod or Bloc, const constructors everywhere they are legal, and rebuild counts checked in DevTools.

Layout

3.4 ms
What blows it

Deeply nested unconstrained widgets, or an IntrinsicHeight doing a second layout pass over a long list.

What ours does

Slivers for long content, fixed extents where they are known, and the intrinsic pass removed.

Paint

5.2 ms
What blows it

Shadows, blurs and opacity layers stacked on a scrolling surface — each one a new render layer.

What ours does

RepaintBoundary where it earns its keep, saveLayer avoided, and blur replaced with a pre-baked asset.

Raster

3.1 ms
What blows it

Shader compilation jank on the first run of an animation the user has never seen before.

What ours does

Impeller on, shader warm-up for the critical path, and a profile-mode trace on a real device before release.

Beyond the frame rate

Six things that make a Flutter app maintainable

Architecture that survives feature four

Riverpod or Bloc chosen once, a repository layer between the UI and the network, and freezed models so a null does not reach a widget.

A design system in widgets

Themed components, not a folder of one-off Containers. Your designer's tokens land as real ThemeData.

Offline and flaky networks

Local persistence with Drift or Isar, an optimistic write, and a sync path that survives an aeroplane.

Platform channels when needed

Swift and Kotlin on the other side of the channel, written properly, with the error cases mapped back into Dart.

Golden tests and CI

Widget tests plus golden images so a padding change cannot silently reflow a screen nobody opened.

Release, both stores

Flavors, signing, Play internal track, TestFlight, and a staged rollout with crash-rate gates.

Seniority

Three bands

If your app is screens over an API, mid-level is genuinely enough. If it needs platform channels, custom painting or an offline sync engine, hire senior.

Mid-level

3–5 yrs$26–32/hr

Builds screens and flows against an agreed architecture. Comfortable with state management, still learning where the frames go.

Senior

5–8 yrs$32–40/hr

Owns the app architecture, reads a timeline trace, and writes platform channels without help.

Lead

8+ yrs$40–54/hr

Sets the design system, the test strategy and the release process — and mentors the rest into them.

Already have a Flutter app that stutters?

Send us a build. We will trace it on a real mid-range device and tell you which of the four phases is costing you the frames — before you hire anyone.