Flutter interview questions and answers
Are you a flutter developer and looking for flutter interview questions and answers? Then this article is for you. This article contains curated questions on flutter. So, make sure to read till the end.
What is Flutter?
Flutter is an open-source UI toolkit from Google for crafting beautiful, natively compiled applications for desktop, web, and mobile from a single codebase. Flutter apps are built using the Dart programming language.
What is flutter used for?
Flutter is used to create fast, beautiful, mobile apps that are compiled using the same programming language and code base
Is Flutter an SDK?
Yes, Flutter is an SDK.
Is Flutter a frontend or a backend?
Flutter is a front-end development framework.
Is Dart language necessary for Flutter?
To use the Dart language to code apps, developers have to know Dart. iPhone applications using the Flutter platform use the Dart language for coding.
What build modes are available in Flutter?
Flutter has 3 build modes, Debug Mode, Profile Mode, and Release Mode.
In What technology is Flutter built?
Flutter is built using C, C++, Skia – 2D rendering engine, and Dart-object-oriented language.
What is a pubspec
file in Dart?
The pubspec file manages the assets and dependencies for a Flutter app.
Flutter Interview questions for 1 year of experience
What’s the difference between a hot reload and a hot restart?
Hot reload maintains the app state while updating the UI almost instantaneously. Hot restart, by comparison, takes a little longer because it resets the app state to its initial conditions before updating the UI. Both of these are faster than doing a full restart, which requires recompiling the app.
When making significant changes, you need to stop and restart the app. On rare occasions, you might have to delete the app from your simulator/emulator or device and reinstall it.
What is the difference between StatelessWidget and StatefulWidget?
StatelessWidget
is an immutable class that acts as a blueprint for some parts of the UI layout. You use it when the widget doesn’t change while displaying and, therefore, has no State
.
StatefulWidget
is also immutable, but it’s coupled with an State
object that allows you to rebuild the widget with new values whenever calling setState()
. Use StatefulWidget
whenever the UI can change dynamically.
If the state becomes more complex or the same state is in two different widgets, then you should consider a more sophisticated state management solution.
You can read more about stateless and stateful widgets in the Flutter docs.
What is the difference between WidgetsApp and MaterialApp?
WidgetsApp provides basic navigation. Together with the widgets library, it includes many of the foundational widgets that Flutter uses.
MaterialApp and the corresponding material library is a layer built on top of WidgetsApp and the widgets library. It implements Material Design, which gives the app a unified look and feels on any platform or device. The material library has many additional widgets that come with it.
You certainly aren’t required to use MaterialApp in your project. You can use CupertinoApp to make iOS users feel at home, or you can even build your own set of custom widgets to fit your brand.
Can you nest a Scaffold? Why or why not?
Yes, you can absolutely nest a Scaffold
. That’s the beauty of Flutter. You control the entire UI.
A scaffold is just a widget, so you can put it anywhere a widget might go. By nesting a Scaffold, you can layer drawers, snack bars, and bottom sheets.
Flutter Interview questions for 2 years of experience
Does Flutter support Material Design?
Yes! The Flutter and Material teams collaborate closely, and Material is fully supported.
Does Flutter come with a testing framework?
Yes, Flutter provides APIs for writing unit and integration tests.
Explain BuildContext.
BuildContexts are used to identify or locate widgets in widget trees. Each widget has its own BuildContext, i.e., one BuildContext per widget. Basically, we’re using it to find references to other widgets and themes. In addition, you can utilize it to interact with widget parents and access widget data.
Define App state.
App State may also be referred to as a shared state or application state. It is possible to share app states across sections of your app and maintain user sessions in the same way.
Explain packages and plugins in Flutter.
A package is a collection of classes, interfaces, and sub-packages that enable the creation of modular code that can be shared easily among users. Applications can be quickly developed using packages instead of developing everything from scratch. You can import new widgets or functionality into an app using a package in Flutter. There is a slight difference between plugins and packages as given below:
Plugins: Using native code, enables more usability and makes it easier to use the device.
Packages: These are new code or components written in the dart programming language.
Packages and plugins are often referred to as packages on pub.dev, and specific distinctions between the two are made only during the creation of a new package.
Flutter Interview questions for 3 years of experience
What is the factory method in Flutter?
The factory method is referred to as a creational design pattern that provides an interface for creating objects in a superclass but allows subclasses to alter the type of objects that will be created. Also known as virtual constructors.
Is multiple inheritance possible in Flutter?
Unlike Java, Dart also doesn’t support multiple inheritance
What is context in Flutter?
Context is a link to the location of a widget in the tree structure of widgets. – Context can belong to only one widget. – If a widget has child widgets, then the context of the parent widget becomes the parent context for the contexts of direct child elements.
What is snapshot data in Flutter?
A library that can be used to implement data classes and simplifies the conversion of JSON to data classes
What is StreamBuilder in flutter?
StreamBuilder is a widget that builds itself based on the latest snapshot of interaction with a stream.
What is a builder in Flutter?
A builder is a Flutter design pattern in which the construction code of a widget is defined outside of its class. Builder functions are callback interfaces that pass data (often layout-specific) to the parent widget which returns a child based on that data.
Can you use multiple scaffold in Flutter?
Yes, but that is precisely what we want when we make two separate screens, each one with its own Scaffold
What is an InheritedWidget?
Flutter Interview questions for 5 years of experience
What is dependency injection in flutter
Dependency injection in Flutter is a technique in which one object supplies the dependencies of another object. A dependency is an object that can be used in the class. It can be a Network service, Database service, Location service etc
Define setState()
We use it for managing the local state in a similar stateful widget and its child. The downside is everything is in the same class like UI code, business logic, and mixin UI, which splits clean code principles.
Explain BuildContext.
BuildContexts are used to identify or locate widgets in widget trees. Each widget has its own BuildContext, i.e., one BuildContext per widget. Basically, we’re using it to find references to other widgets and themes. In addition, you can utilize it to interact with widget parents and access widget data.
What is the difference between InkWell and GestureDetector?
The main difference between InkWell and GestureDetector lies in the Material widget. InkWell must have a Material Widget as an ancestor. However, there is no such compulsion for the GestureDetector widget. Otherwise, in many ways, these two widgets share common features
What are Null-aware operators in Flutter?
Dart offers some handy operators for dealing with values that might be null.
a.One is the ??= assignment operator, which assigns a value to a variable only if that variable is currently null
b.Another null-aware operator is ??, which returns the expression on its left unless that expression’s value is null, in which case it evaluates and returns the expression on its right
What is the use of Navigation.push and Navigation.pop function?
The push method is used to add a route to the stack of routes managed by the navigator. The pop method is used to remove the current route from the stack of routes managed by the navigator.
Flutter bloc interview questions
What is BLoC Pattern?
BLoC stands for Business Logic Components. It helps in managing the state and makes access to data from a central place in your project. The gist of BLoC is that everything in the app should be represented as a stream of events: widgets submit events; other widgets will respond. BLoC sits in the middle, managing the conversation.
What kinds of design patterns can be leveraged with BLoC?
BLoC can be used with a variety of design patterns, but it is most commonly used with the Model-View-Controller (MVC) and Model-View-Presenter (MVP) patterns.
What’s the best way to fire events into your Bloc? Should the bloc class have access to the event stream directly or should it go through a repository?
The best way to fire events into your Bloc is through a repository. This will allow you to keep your Bloc class decoupled from the event stream, and will also make it easier to unit test your Bloc.
Why should we not make `setState` calls inside our Bloc classes?
The main reason for this is that `setState` calls are asynchronous, which means that they can’t be guaranteed to happen in a specific order. This can lead to unexpected results, especially when multiple `setState` calls are made in quick succession. Additionally, `setState` calls can cause performance issues if they are called too frequently.
Can you explain what sinks and streams are?
In a nutshell, streams are a way of handling asynchronous data, while sinks are a way of handling data that is being added to a stream. Streams can be thought of as a pipe, through which data flows. Sinks are like the tap that controls the flow of data into the stream.
What are some common Bloc patterns that are used when developing an application in Flutter?
Some common Bloc patterns that are used when developing an application in Flutter include the following:
-The use of a StreamController to emit events that will be processed by the Bloc.
-The use of a StreamBuilder to listen for events emitted by the StreamController and rebuild the UI in response to those events.
-The use of a Sink to provide input to the Bloc from outside sources.
-The use of a StatefulWidget to manage the state of the Bloc.
Flutter BLoC Interview Questions and Answers
What is Rune in Dart?
A rune can be defined as an integer used to represent any Unicode code point. As a Dart string is a simple sequence of UTF-16 code units, 32-bit Unicode values in a string are represented using a special syntax. The String class in the dart:core library gives ways to access runes
What is an enum in dart?
Enumerated types (also known as enumerations or enums) are primarily used to define named constant values. The enum keyword is used to define an enumeration type in Dart. The use case of enumeration is to store finite data members under the same type of definition
What is assert dart?
The assert statement is a useful tool to debug the code and it uses a boolean condition for testing. If the boolean expression in the assert statement is true then the code continues to execute, but if it returns false then the code ends with an Assertion Error
- 50+ New Flutter Interview Questions
- Quote Book App Flutter Tutorial – Your Step by Step Guide to Create a Beautiful Quote App
- Flutter Splash Screen Tutorial
- Best Flutter CRUD Tutorial Using Drift Package
- Best Way To Use Flutter ListView Long List
Flutter is a new platform that everyone is still learning which is why most of the devs are not able to find what to prepare for the Flutter interview. This blog is helpful for both the interviewer and the candidate.
The following are the types of questions asked in the interview.
- Life Cycle & Routes
- Widgets
- Async operations
- Storage
- Platform Specific Android/iOS
- Dart
- Architecture
- Test Cases
some are also related to assets, firebase, etc…
1. Life Cycle & Routes
- Why Flutter? over other platforms?
- What is a Widget in Flutter? Why Flutter doesn’t have other files like XML, styles, etc…?
- Difference between a StatelessWidget and a StatefulWidget in Flutter?
- Explain the Stateful Widget Lifecycle?
- How Flutter Lifecycle different from the Android/iOS life cycle?
- How build() method works? How it rebuild itself?
- Does a new state object is created if the widget re-build?
- What is a Navigator and what are Routes in Flutter?
- What are the trees available in Flutter? Eg: Widget Tree, Element Tree…
- What is the ephemeral state? and Differentiate between ephemeral state and app state? Learn from here
- When do we use the WidgetsBindingObserver?
- Difference between SchedulerBinding and WidgetBinding? Learn from here
- How would you access StatefulWidget properties from its State?
- If the child widget gets re-initialized, does it also re-initialize the parent widget?
- How to re-initialize parent widget from child widget? Explain several ways?
2. Widgets
- What would happen if I converted a stateless widget to Stateful Widget? Is there any performance issue?
- Flexible Vs Expanded Learn from here
- SizeBox VS Container?
- What is a Spacer widget?
- How to show/hide widgets? Learn from here
- What is the importance of a TextEditingController?
- How to shift focus to next TextField in flutter? Learn from here
- List the Visibility widgets in flutter and the differences?
- What are the ways to get data from called Widget?
- Why ListView inside Column not works?
- Differentiate between Listview and Listview.Builder? Learn from here
- How to scroll to a position in Flutter ListView?
- How to place a listview inside a SingleChildScrollView but prevent them from scrolling separately? Learn from here
- How can you update a ListView dynamically?
- When to use ShrinkWrap the property?
- Why do we use a Reverse property in a Listview?
- What is an UnmodifiableListView?
- What is SliverList and how to use it?
- How to draw Text over Image? Learn from here
- What are keys in Flutter and when should you use them?
- What are GlobalKeys?
- When should you use mainAxisAlignment and crossAxisAlignment?
- When can you use double.INFINITY?
- When to use a mainAxisSize? and diff between MainAxisSize.min andMainAxisSize.max ?
- What is the purpose of a SafeArea?
- SafeArea is basically a glorified Padding widget. If you wrap another widget with SafeArea, it adds any necessary padding needed to keep your widget from being blocked by the system status bar, notches, holes, rounded corners, and other “creative” features by manufacturers.
SafeArea( minimum: const EdgeInsets.all(16.0), child: Text('My Widget: ...'), )
- How to assign min-height to the widget? Learn from here
- How to align two items on extremes - one on the left and one on the right? Learn from here
- Mention two or more operations that would require you to use or return a Future.
- Can we use Color and Decoration property simultaneously in the Container? Explain
- In order for the CrossAxisAlignment.baseline to work what is another property that we need to set?
- When should we use a resizeToAvoidBottomInset?
- Difference between a Modal and Persistent BottomSheet with an example?
- How is an Inherited Widget different from a Provider?
- What is an InheritedWidget? List some examples.
- When to use Intrinsic height?
- When to use Custom ScrollView?
- Difference between GestureDetector and InkWell? Learn from here
- What is a vsync?
- Difference between AnimationController and Animation?
- When to use a SingleTickerProviderStateMixin and TickerProviderStateMixin?
- What is Ticker, Tween and AnimatedBuilder?
- What is an AspectRatio widget used for?
- What is the purpose of ModalRoute.of()?
- Difference between RemoveUtil and PopUtil in Flutter navigation? Learn from here
- Difference between a Navigator.pushNamed and Navigator.pushReplacementNamed?
- What is the use of WidgetsBinding class?
- How to perform Hero Animation?
- Difference between Element Tree, Widget Tree and Render Tree.
- How to get responsive Flutter layouts? Learn from here
3. Async operations
- Explain async, await , thenand Future keyword
- Use of yeild keyword?
- Why build re-triggering again and again? How to scroll to a position in Flutter ListView?
- Why FutureBuildercalled multiple times? how to resolve this? Learn from here
- What’s the difference between async and async* in Dart?
- What is a Stream?
- Differentiate between StreamBuilder and FutureBuilder
- What is the difference between FutureBuilder and await?
- What are the ways to use Future Object?
- How to group multiple Streams?
- Why await is not blocking UI? Learn from here
- How to perform Syncrnonization in Flutter? Learn from here
- Differentiate between Provider and Consumer? Learn from here
- How to run foreground services?
- How to schedule a job after specific intervals?
- Difference between whenCompleted() and then().
- How to run code after Build() method execution?
- How to create an HTTP client with headers?
/// To get it done, we need one endpoint and headers and make the HTTP request. import 'package:http/http.dart' as http; final url = Constants.BASE_URL + 'endpoint'; final headers = {'Content-Type': 'application/x-www-form-urlencoded'};//if required Response getResponse = await http.get(Uri.parse(url), headers: headers); int statusCode = getResponse.statusCode; String responseBody = getResponse.body; print('response----' + responseBody);
- Use of http and dio package? Can we use them combined? if yes then how?
- How Compute works?
- How to perform multithreading? and return response so that widget can be updated?
- How do I implement a timer to execute code after a certain delay?
/// There are two ways to do that /// 1. Timer Timer(Duration(seconds: 2), () { print("Execute this code afer 2 seconds"); }); /// 2. Future: Future.delayed(Duration(seconds: 2), () { print("Execute this code afer 2 seconds"); });
4. Storage
- Why SharedPreference commit method is deprecated? Learn from here
- How to persist data in Database ?
5. Platform Specific Android/iOS
- How does the platform channel work?
- How to perform a background job on a specific platform?
- How to send local notifications?
6. Dart
- Difference between these operators “?? and ?.”
- Difference between Constand final? Is there any performance issue If I select one of them over another?
- What is Extention and how to use it with the existing code?
- What is typedef in Dart?
- How to handle null conditions? and use of the ‘??’ operator.
- Use of ‘=>’ operator?
- Differentiate between forEachand whereclause
- What is the advantage of Factory constructor?
- Why dialog inside FutureBuilder not working? Learn from here
- Use of compareTo method? Learn from here
- Advantages and Disadvantages of using static ?
- Benefits of an abstract class with a factory constructor?
- A factory constructor allows you more control over what the constructor returns. It can return an instance of a subclass or an already existing (cached) instance. It can return different concrete implementations based on a constructor parameter:
abstract class WidgetService { factory WidgetService(String type) { switch (type) { case 'a': return ConcreteWidgetServiceA(); case 'b': return ConcreteWidgetServiceB(); default: return DummyWidgetServiceA(); } } }
- Use of extends , interface and mixin ?
- extends (inheritance) => Only one class can be inherited along with their public/protected members and behaviors.
- implements (contract) => Many classes can be implemented but we have to redefine every behavior.
- with(mixin) => Many classes can be mixed in and we can reuse the behavior of them.
Any class or abstract class can be used as a mixin. But if we declare mixin, it cannot be extended like a normal class or abstract class.
class A{} //Declaring class mixin B{} //Declaring mixin class C extends A{} // Valid ✅ class C implements A{} // Valid ✅ class C with A{} // Valid ✅ class C extends B{} // Invalid ❌ class C implements B{} // Valid ✅
But a mixin cannot use another mixin.
mixin C with B{} // Invalid ❌
7. Architecture
- How to use Bloc architecture?
- How to use MVVM architecture?
- Difference between Bloc vs MVVM ?
- What is Provider state management?
- What are the different state management techniques? Learn from here
8. Test Cases
- How to mock objects? which classes used to do that?
- How to verify httprequest callbacks?
- How to catch the Exceptions?
- UI test cases Learn from here
Others
- if we change localization to the RTL language, is it changed according to language direction
- What is the use of Equatable?
- Does dart support Method Overloading?
- How we can handle the error at the project level? Is it possible to show some widgets in that case?
- How-to Encrypt and Decrypt data while making network calls?
- Difference between getDocuments() vs snapshots() in Firebase?Learn from here
- What is the difference between hot restart and hot reload?
- How to deal with unwanted widget build? Learn from here
- What is the difference between the flutter package and the flutter plugin?
- What is the use of addPostFrameCallback ?
- How to send nested json requests to the server?
- What is the difference between ‘as’,’ show’ and ‘hide’ in an import statement?
- Use of export keyword?
- How to perform infinite scrolling?
- What are the ways to share images on WhatsApp, Facebook, etc?
- Difference between a Single Instance and Scoped Instance ?
- When Bad State Exception occurs? Learn from here
- How to achieve loose coupling?
- What is a pubspec file in Dart?
- How to obfuscate Flutter apps? Learn from here
- Procedure to generate release .apk(for Android) and .ipa(for iOS)
- Why a declarative UI? Learn from here