Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Flutter jank is a missed frame deadline. To find its cause, reproduce the stutter in profile mode on a physical device, inspect the slow frames in Flutter DevTools, and optimize the UI or raster work that the trace shows is late. A fix is only confirmed when the same interaction improves under the same measurement conditions.
What a dropped frame means
A display refreshes at a fixed cadence, so Flutter has only a limited time to prepare and render each frame. Flutter describes an approximate budget of 16 milliseconds at 60 Hz and 8 milliseconds at 120 Hz; the relevant target depends on the device’s refresh rate. A frame that misses its deadline can make scrolling or animation look jerky. These are timing budgets, not a promise that an app will achieve a particular frame rate. Flutter’s Performance view documentation explains the frame chart and timing.
Measure the interaction under representative conditions
First reproduce the exact scroll, transition, animation, or first-use action that stutters. Profile on a physical Android or iOS device, ideally one near the slower end of the hardware your intended audience might use. Debug builds add overhead and behave differently, while an emulator or simulator does not reproduce a physical device’s hardware characteristics. Use profile mode for performance analysis rather than treating debug timings as representative. See Flutter’s build-mode guidance.
- Reproduce: Run the same action that triggers the visible problem, including a first-run animation if that is when it happens.
- Profile: Use a profile build on a physical target device and open Flutter DevTools’ Performance view.
- Select slow frames: Inspect the Flutter frames chart during the interaction. Select a slow frame to update Frame analysis and the timeline with details for that frame.
Use the frame chart to locate the late work
The chart pairs UI-thread and raster-thread timing for each frame. The UI thread runs Dart and framework work and creates a layer tree; the raster thread renders that tree through the engine and GPU. The side that overruns its available time points to where to investigate, but a symptom alone does not establish a root cause. Read the selected frame’s Frame analysis and timeline events before changing code. The DevTools guide describes these views.
Recommended Free Tools
#1 Best Overall
| What the trace shows | Where to investigate |
|---|---|
| UI-thread time is high | Synchronous Dart or framework work, rebuilds, layout, or paint preparation. |
| Raster-thread time is high | The rendering cost of the scene, including effects that require additional compositing or drawing work. |
| First run is slow but later runs are smoother | Check whether shader compilation is involved; DevTools can highlight shader-compilation frames in dark red. On mobile, Flutter advises using its default graphics renderer, Impeller, when noticeable jank is confined to an animation’s first run. Confirm the target platform and Flutter version before applying renderer-specific advice. |
DevTools also provides layer toggles for investigating clipping, opacity, and physical-shape effects. Treat them as diagnostic experiments: reproduce the same interaction with a toggle changed and compare the relevant frames. They help test whether a class of effects contributes; they do not prove that every use of that effect is harmful.
Fix the bottleneck the trace identifies
When UI-thread work is late
- Find unexpected rebuilds. Track widget builds during the slow interaction and look for work repeated during animation or ancestor rebuilds. Avoid costly operations that run repeatedly in
build(). Flutter notes that callingsetState()rebuilds descendants of that state object; split large widgets around meaningful encapsulation and change boundaries. Flutter’s performance best practices cover rebuild and build-method guidance. - Keep static content out of a frequently called animation builder. For
AnimatedBuilder, construct animation-independent subtrees once and pass them through itschildparameter instead of rebuilding them on every animation tick. Flutter’s best-practices guide explains this pattern. - Build long lists lazily. When a large collection shows only part of its contents at once, use a lazy
ListViewconstruction pattern rather than eagerly creating a large set of children. Flutter’s rendering performance guidance discusses list construction. - Move blocking computation off the main isolate when warranted. Large parsing, filtering, or media-processing work can block frame production if performed synchronously. Flutter’s rule of thumb is to use isolates when large computations cause UI jank; work that fits within the available frame gap may not need that added complexity. See Concurrency and isolates.
When raster-thread work is late
Inspect the selected frame’s rendering events and test suspected scene effects with DevTools’ layer toggles. Flutter identifies unnecessary saveLayer() work and some combinations of opacity, clipping, and shadows as potential costs. Simplify only effects shown by the trace or diagnostic comparison to contribute; these effects are not a blanket list of features to avoid. The Performance view documentation describes the diagnostic controls, while the best-practices guide covers rendering considerations.
Rank #2
When the problem is on Flutter web
Use Chrome DevTools’ Performance panel to inspect Flutter web timeline events rather than relying on the Flutter mobile and desktop frame chart. Optional flags can add build, layout, and paint events; Flutter’s web profiling guidance says profiling web apps requires Flutter 3.14 or later. Check that requirement against the SDK version in use. See Flutter’s web performance profiling guide.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Verify that the change actually helped
Repeat the same interaction in profile mode on the same physical device and compare the relevant frame timings. For ongoing tracking, Flutter’s metrics guidance identifies buildDuration, rasterDuration, and totalSpan and recommends examining the average, 90th percentile, 99th percentile, and worst frame build and raster times. Averages alone can hide occasional severe stalls, while a single worst frame does not describe typical behavior. See Flutter’s performance metrics guidance.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Quick Recap
Best Value
Rank #4
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




