Flutter’s “everything is a widget” model is simple to start and easy to abuse. These questions check whether a candidate understands the rendering and state model.
Hiring a Flutter developer is easy. Telling a real one from a convincing résumé is the hard part — and it’s most of what we do. These are grouped by level, because the same question that stretches a junior is a warm-up for a senior.
Junior Flutter interview questions
0–2 years
Widgets and Dart basics.
What does “everything is a widget” mean?
UI, layout and even some behaviour are composed from widgets in a tree; you build UI by composing widgets, not templates.
Looks for HTML-like templates.
What is the difference between StatelessWidget and StatefulWidget?
Stateless has no mutable state and rebuilds only when inputs change; Stateful holds state in a State object and rebuilds via setState.
Uses Stateful everywhere or mutates fields without setState.
What does setState do?
Marks the widget dirty so Flutter rebuilds it with new state on the next frame.
Mutates state directly and the UI doesn’t update.
What is the build method?
Returns the widget subtree for the current state; it should be pure and fast because it can run often.
Does expensive work or side effects inside build.
What is the difference between hot reload and hot restart?
Hot reload injects changed code keeping state; hot restart rebuilds the app losing state.
Doesn’t know why state sometimes resets.
How does layout work with Row, Column and Expanded?
Flex widgets arrange children; Expanded/Flexible distribute remaining space along the main axis.
Overflows the screen with no idea how to constrain children.
What are keys in Flutter?
They preserve widget state across rebuilds when position changes, important in lists.
Never uses keys where identity matters.
What is BuildContext?
A handle to a widget’s location in the tree, used to look up inherited widgets, theme and navigation.
Uses a context after the widget is disposed.
Mid-level Flutter interview questions
2–5 years
State management and async.
What state management approaches exist?
From setState and InheritedWidget to Provider, Riverpod and BLoC; choose by app complexity.
Only knows setState and prop-drills everything.
How do Futures and async/await work in Dart?
Futures represent eventual values; async/await reads sequentially, and FutureBuilder renders based on async state.
Blocks the UI thread waiting on a Future.
What are Streams and where do you use them?
Sequences of async events (e.g. websockets, state changes); StreamBuilder rebuilds on new events.
Polls instead of subscribing to a stream.
What is the widget tree vs element tree vs render tree?
Widgets are immutable configs; elements are their instances that persist; the render tree does layout and painting. This explains efficient rebuilds.
Thinks a rebuild recreates the whole UI from scratch.
How do you avoid unnecessary rebuilds?
const constructors, splitting widgets, scoping state, and using selectors so only affected widgets rebuild.
Rebuilds the entire screen on every change.
How do you handle navigation and routing?
The Navigator with named or declarative routing (e.g. go_router), passing and returning data between screens.
Cannot pass data between screens cleanly.
How do you handle different screen sizes?
MediaQuery, LayoutBuilder and flexible layouts for responsive and adaptive design.
Hardcodes pixel sizes for one device.
What is the difference between mainAxis and crossAxis?
The main axis is the flex direction; the cross axis is perpendicular; alignment properties target each.
Confuses which axis alignment affects.
Senior Flutter interview questions
5+ years
Performance and architecture.
How do you diagnose jank in Flutter?
The DevTools performance overlay and timeline to find frames exceeding the budget, then reduce work in build/paint.
Assumes Flutter can’t drop frames.
How does Flutter render, and why is it fast?
It draws widgets itself via Skia/Impeller rather than using native widgets, giving consistent UI and control at 60/120fps.
Thinks Flutter wraps native platform widgets.
How do you structure a large Flutter app?
Feature-first architecture, a clear state-management choice, separation of UI and business logic, and dependency injection.
God-widgets mixing UI, state and I/O.
How do you write and test business logic separately from UI?
Keep logic in testable classes/notifiers/BLoCs and unit-test them, with widget tests for UI.
All logic lives inside widgets, untestable.
How do you handle platform channels?
MethodChannels to call native iOS/Android code for features not covered by plugins.
Doesn’t know how to reach native APIs.
How do you optimise app size and startup?
Tree-shaking, deferred loading, split debug info, and trimming assets and dependencies.
Ships a bloated app with slow start.
When is Flutter the wrong choice?
Where deep native platform integration, tiny binary size, or an existing native team outweighs shared-code benefits.
Claims Flutter is always the right call.
How do you manage immutability and rebuilds with complex state?
Immutable state objects and equality so the framework can skip unchanged subtrees; libraries like freezed help.
Mutates shared state and gets stale UI.
Build and score a full interview with our free interview scorecard tool, browse the full question hub, or see how we interview engineers.