Fifteen common Flutter interview questions
- Everything is a widget — what does that mean?
- Explain the widget, element and render object trees.
- StatelessWidget versus StatefulWidget?
- What is BuildContext?
- What are keys, and when do you need them?
- What does setState do, and what are its limits?
- Compare state management options you've used.
- Futures versus streams? async and await in Dart?
- What are isolates, and when would you use one?
- How does hot reload differ from hot restart?
- How do you find and fix jank?
- What does const do for widgets?
- How do platform channels work?
- How do you handle navigation and deep links?
- How do you test a Flutter app?
How Flutter renders
- Widgets are immutable descriptions of UI configuration — cheap to recreate.
- Elements are the long-lived instances that manage a widget's place in the tree and hold state for stateful widgets.
- Render objects handle layout and painting. Flutter rebuilds widgets often but reuses elements and render objects where it can, which keeps rebuilds fast.
- BuildContext is a handle to a widget's element — its location in the tree — used to look up inherited data such as themes or providers.
- Keys preserve state when widgets move or reorder in lists; without them, Flutter may reuse the wrong element.
State management
| Approach | Good for |
|---|---|
| setState | Local, simple UI state within one widget |
| InheritedWidget | The low-level mechanism behind most solutions |
| Provider / Riverpod | Dependency injection and app state with good testability |
| Bloc / Cubit | Explicit events and states, popular in larger teams |
| Redux-style or MobX | Teams with experience in those patterns |
Interviewers care less about which library you choose than about separation: UI widgets that render state, business logic in testable classes, and data access in repositories. Explain why you chose your approach for a past project.
Async, isolates and performance
A Future represents a single asynchronous result; a Stream delivers many over time. async and await make asynchronous code read sequentially. Dart runs UI code on a single isolate with an event loop, so heavy CPU work — parsing a huge JSON file, image processing — should move to another isolate (for example with compute or Isolate.run) to avoid dropped frames. To fix jank: profile in profile mode with DevTools, use const constructors to skip rebuilds, keep build methods cheap, use ListView.builder for long lists, avoid expensive layout operations and cache images.
Platform integration and testing
- Platform channels pass messages between Dart and native Kotlin or Swift code for APIs Flutter doesn't cover; plugins wrap this.
- Hot reload injects code changes and keeps state; hot restart restarts the app and resets state.
- Testing: unit tests for logic, widget tests for UI components in isolation, and integration tests for full flows on a device or emulator.
The take-home app
Flutter take-homes typically ask for a small app that fetches data from an API, shows a list and a detail screen, and handles loading and error states. Reviewers look for clear separation between UI, state and data layers, sensible state management, handled edge cases such as empty results and network failures, a few meaningful tests, and a README explaining decisions. Polish matters less than structure and correctness.
Practising
The fastest way to find gaps is to be asked. Run a spoken mock round on Flutter topics — a free AI interview assistant such as CoPilot Interview builds one from your résumé and the job description and scores every answer — then study whatever you stumbled on. Build a small app with a list, a detail screen, network calls and one state management approach, and be ready to justify the structure. See also Android and iOS questions.
Disclosure: CoPilot Interview is our product, so weigh what we say about it accordingly. Everything else on this page applies whichever tool you use, or none.
Frequently asked questions
What are common Flutter interview questions?
Widgets and the widget, element and render trees, stateless versus stateful widgets, BuildContext, keys, state management, futures and streams, isolates, hot reload, performance, platform channels and testing.
What is the difference between StatelessWidget and StatefulWidget?
A StatelessWidget depends only on its configuration and parent; a StatefulWidget has a State object that persists across rebuilds and can call setState to update the UI.
Which Flutter state management should I use?
It depends on app size and team preference. setState suits local state; Provider, Riverpod and Bloc are common for app-wide state. Separation of UI and logic matters more than the library.
When should I use an isolate in Flutter?
For CPU-heavy work such as parsing large data or image processing, so the main isolate keeps rendering frames smoothly.
Practise on real interview questions
Run 145 real interview questions across 10 tracks, answer out loud and see a structured answer to compare with yours. Free, no signup.
Try a practice question