If you’re applying for a senior position, you’re probably familiar with the interview process. Depending on the company you apply to, it can be quite casual and informal. But it doesn’t negate the need of preparing for an IT job interview. Knowing the questions that can be asked for the position of Senior Flutter Developer will help you to prepare and to be more flexible. Here I’ve prepared a few technical questions and subjects for you to think about.
1. What is the difference between an Isolate and a Future?
Dart, despite being a single-threaded language, offers support for multithreading. Future class, often combined with async/await sugar code, allows us to create asynchronous code. However, this code will be executed on a single thread. If we need to perform a non-trivial operation that would benefit from using multiple threads we can use Isolate. By calling the compute method or Isolate.spawn constructor, we can create an isolate that will work independently to the UI. Using isolates can help if our animations are dropping framerate while executing demanding code.
2. What is your favorite state management?
As Senior Developers, we should be able to operate on more than one popular state management solution. On our path through many different Flutter projects, we can familiarize ourselves with packages like bloc, riverpod, provider, or hooks. Some engineers, especially the ones that come from web software development, like to adapt Redux or MobX into their projects. The most popular solution for many developers seems to be a combination of different state management solutions. That’s because the state in Flutter can be divided between ephemeral state and app state.
3. How would you approach implementing a paginated list view in Flutter?
There are two approaches to solve this problem. One is to use the infinite_scroll_pagination package. This approach allows us to implement simple paginated list views quickly. A lot of the boilerplate code is taken care of for us. However, on rare occasions, the requirements disqualify using a premade solution like infinite_scroll_pagination. Custom UI design or an uncommon way of calculating pages and list items may require us to build the pagination using widgets that exist in Flutter. In that case, a good knowledge of ListView and GridView may come in handy.
4. What is a WidgetsBindingObserver?
Flutter apps work in a lifecycle. That means that an app can have many states. For example when a user turns off the screen by blocking their phone the state of the app is changed. WidgetsBindingObserver is a mixin that allows reading changes in app state. States that can occur are inactive, paused, resumed, and suspending.
Based on that information we can perform operations like stopping an audio player after the screen is turned off.
5. What is your favorite dependency injection solution and why? Why is it so important to do proper dependency injection in our Flutter projects?
In Flutter there are two approaches to dependency injection. One assumes that dependency injection should be performed in the widget tree. This approach can be achieved by using the InheritedWidget or the provider package. The other one assumes that the dependency injection is performed outside of the widget tree. We can perform this by using the get_it package. This package recognizes itself as a Service Locator. Some developers view this approach as a non-Flutter approach. However, it was proven by many production projects that it’s a viable solution for dependency injection in Flutter apps. In combination with the injectable package, this can be a perfect match for managing many dependencies in a large-scale project.
Dependency injection is important to manage the objects registered in the memory of our device. We can make sure that objects that are supposed to be registered in memory once are registered properly and not recreated within the code’s logic. Also, proper dependency injection allows us to create testable code.
6. What local storage solutions did you use? When is it more advantageous to use SQL rather than NoSQL solutions?
There are several approaches to save local data while programming in Flutter.
- The first is to use the shared_preferences package. This approach allows you to save simple key-value pairs. It’s perfect for saving simple, unorganized data.
- A solution that allows us to save more complex data would be a NoSQL database. The most common package for that approach is the hive. It’s a very fast database providing a simple, powerful, and intuitive API. It has built-in encryption using AES-256. What may be important for long-lasting projects is that it does not use any native dependencies. That means the chances of it breaking down during Flutter or OS update are very low.
- The most complex solution would be to use SQL databases. That type of database allows you to use SQL queries to read and manipulate data. For complex solutions and apps that process a lot of structured and related data, this may be a perfect fit. The most popular solution for Flutter would be sqflite package. It’s an SQLite wrapper for Android and iOS, as well as macOS. It supports transactions, batches, and automatic version management. If you don’t want to write SQL there are helper methods for CRUD operations.
7. On what platforms are you usually deploying your Flutter apps? Are you able to write native code on these platforms?
While creating Flutter applications we have to remember that Flutter is just a UI toolkit. With the support of community packages, we can create a lot of things without dipping our toes in native programming languages like Kotlin or Swift. However, at some point in your career, you might face a case where some functionalities require programming in native languages. In that case, as a Senior Flutter Developer, you should be able to solve that issue by creating a Flutter plugin for at least one technology.
Deploying your app might also be challenging if you never worked with native platforms. For example, deploying a mobile app might be completely different than deploying a Windows app. That being said, before starting your Flutter project you should assess whether you can deploy your app on a targeted platform. Most of the time Flutter apps are created for mobile. So, Senior Flutter Developers should be able to deploy an app to Google Play Store or Apple App Store.
8. Are you familiar with concepts like Clean Architecture and Domain-Driven Design?
Clean Architecture and Domain-Driven Design are strategic approaches towards building complex enterprise apps. As a candidate for senior-level, you should be able to build apps based on at least one of these approaches. That should allow you to build scalable and testable applications.
- Clean Architecture focuses on testability and modularity. The main business logic of our app should be separated from the UI and the rest of the code.
- DDD is meant to establish a common language between developers and business experts.
9. What types of tests did you write? What test coverage are you aiming for in your projects? Is it always advantageous to aim for the highest test coverage possible?
In Flutter we can create unit, widget, and integration tests. Each test category has its pros and cons.
- Unit testing tests a single method or a class.
- Widget testing tests a single widget.
- Integration testing tests a large part of an app.
Test coverage might be a controversial topic. Some believe that aiming for the highest coverage possible is the way to go. On the other hand, sometimes during a development cycle, the product is rapidly evolving and the development has a prototyping nature. That being said, the minimal test coverage requirement should be based on a project development state.
10. How would you approach creating an unusual UI element like a custom widget or a custom slider thumb?
There are two types of custom widgets in Flutter. When we want to create something unusual we can choose to use CustomPainer. It allows us to access low-level graphics painting. By using CustomPainer we can draw shapes and control every pixel of the widget. If we combine it with GestureDetector we will be able to create interactive, animated custom widgets.
It’s also possible to make widgets the same way that the Flutter framework does it by using RenderObject. That allows us to access low-level Flutter API. The best way to learn these is to read Flutter’s framework source code.
Bonus: What is the Flutter or Dart feature you are waiting for the most?
This question does not have one answer. It also depends on the time you are reading this article. However, answering this question shows that you are interested in the topic and that you follow Flutter’s creators’ plans for the future. For example, some time ago the most awaited feature was null safety. Now, for me, it’s the metaprogramming in Dart.
Do you want to find out more about Flutter development?Talk to us!
Become a Flutter Developer
Before meeting with a digital agency or any other IT organization where you’d like to work as a Senior Flutter Developer, my advice is to prepare answers for such questions. Your expertise and well-preparedness can greatly improve your chances of landing the job you want. And if you’re still looking for a place to work as a Flutter Developer, keep an eye on Applover’s Careers Page because we hire new developers regularly to keep up with the company’s development. We might need someone like you right now!