As a software consultancy, we very often have an opportunity to create projects in new, modern technologies. In this blogpost, we would like to describe to you our the experience we gained programming with Flutter, a modern, cross-platform framework created by Google.
Let’s start with a few words about Flutter. It is a modern, reactive framework, created by Google for development of mobile applications that work on both Android and iOS. Due to good promotion during the last I/O Conference, it’s getting more and more popular. We had a chance to get familiar with it when it was still in beta.
To create a Flutter application, you have to use the Dart programming language. It’s a modern and type-safe programming language, which is well suited to reactive programming. It is similar to many popular languages like Java, C# and so on. Both Flutter and Dart are very easy to learn, even for beginners. Flutter applications can be developed in Android Studio, Intellij IDEA or Visual Studio, so every developer can choose their favourite IDE.
Flutter has a lot of advantages. The main one is that a lot of code can be shared between platforms - developers do not have to write any platform-specific code. The way layouts are created in Flutter might be not very intuitive, which may slow down development at the very beginning. However, after some time spent programming, it gets easier very quickly. The framework’s perfect integration with IntelliJ IDEA can also be very helpful.
Moreover, although developers use the same widgets on both platforms, Flutter takes care of properly displaying platform-specific widgets, like different scroll behaviour on each platform. That's why applications built in Flutter really look like native ones.
We decided to create our first application in Flutter - an animated chat for gamers. There were many reasons why we had chosen Flutter instead of, for example, React Native, in which we had experience. The main reason was that the application uses Firebase for data storage, and Flutter has a perfect integration with Firebase and other Google services.
Another reason was time. We did not have much of it, so we chose a solution with a lot of shared code between platforms. Flutter was very well-suited for that purpose, and the application ended up looking better than if we had built it using a different solution.
What is more, any application should be appealing, user friendly, and should have a lot of animations. Flutter supports animated gifs, and, as mentioned above, displays widgets in line with platform requirements, so using the framework helped us implement these features.
We also wanted to learn something new. As mentioned above, we already had significant experience with React Native. Flutter is a new framework, and it is very promoted by Google to match market requirements. So it was important for a company like Netguru to have knowledge about this new, modern solution, which very likely is going to get more and more popular. That’s why, finally, we decided to create our chat app in Flutter.
We started the project with a team of two developers, a Project Manager, and a Quality Assurance Specialist. Flutter was something new for everyone.
At the beginning, it was a bit difficult to create our new application in Flutter - our developers had to learn not only about Flutter and its tools, but also which patterns they should use and how to plan the whole application to keep the code clean and generic. It was not a long process, but it took longer than our estimations.
However, after this first, initial sprint, our developers learned how to use Flutter properly and got used to its tools. That’s why we were able to speed up our development process, and finish all the overdue tasks. Finally, we were meeting our estimations. Moreover, Google released new version of Flutter, which fixed many bugs, making our work that much easier.
The most interesting part of our development process were the last days before the deadline. Our QA was reporting some bugs, and the developers were able to fix them very quickly. We were not expecting such good results. The development process was really fast and bug fixing was not so hard.
The final result was very satisfying for all our team. The application was just a demo, but its quality really exceeded our expectations. The animations were working smoothly and the application itself looked like a native one.
As you may have noticed, Flutter has lot of advantages.
It’s created by Google, so it has perfect support.
It’s very easy to learn, even for beginners.
Applications created in Flutter work and look like native ones (Flutter preserves platform-specific behaviour).
It has a lot of shared code between platforms.
It is getting more and more popular.
It has excellent performance - it is designed to achieve a constant 60fps.
Thanks to hot reloading, changes can be applied very fast, which speeds up the development process.
However, Flutter also has some cons:
The community is rather small compared to React Native or Xamarin. Developers are creating new libraries and plugins, but Flutter still has a long way to go.
It’s a new technology, so lot of services, like AWS, don’t support it yet.
According to the official documentation: ‘we measured the size of a minimal Flutter app (bundled and compressed as a release APK) to be approximately 6.7MB’ - so Flutter apps are inherently larger than native ones.
In our case, Flutter was the perfect choice, but is it a good choice for you? It depends on your application.
If you do not have a lot of time, and would like to create a useful application on Android and iOS, you should consider using Flutter, especially when you would like to use some of Google’s services, like Firebase.
Flutter is easy to learn and, after you get used to it, you can develop multi-platform applications quickly and easily.
However, if you would like to use some other services, such as AWS, it would be very difficult to work with Flutter - the support just isn’t there yet.
Moreover, we would recommend it only for smaller projects - it is a rather new technology, and we cannot be sure of its future.
We would like to sum up our knowledge about Flutter. Hopefully, it will make your decision about using the framework much more easier:
Flutter has excellent performance. From the official documentation: ‘Flutter is designed to help developers easily achieve a constant 60fps. Flutter apps run via natively compiled code – no interpreters are involved. This means Flutter apps start quickly.’ Applications created with Flutter are very stable and really look like native ones.
Flutter is very easy to learn for developers experienced in objective languages, like Java or C#. However, for developers familiar with React, React Native can be a better choice.
Flutter supports material design (on the Android platform). If you do not want to use MD in your app, Flutter won’t be a good choice.
Flutter is a reactive framework, and Google highly recommends to use reactive programming with Flutter. If your developers are not used to this kind of programming, think about using a different platform than Flutter.
Flutter is using Dart as a programming language. Every developer familiar with JAVA can learn this language very easily.
Flutter community is still very poor. Many services don’t support Flutter, and you won’t be able to find solution every problem you have
You cannot be sure, that apple won’t reject your Flutter app in AppStore. Read more about it here
Without some specific cases, you do not need do do any extra work for specific platform - every widget works on both platforms and you do not need any platform - specific code.
With Flutter’s hot reload feature let you reload your changes with sub-second reload times. It can speed up your development process
Flutter is modern, interesting way of creating mobile apps. If you would like to create your application in Flutter, you may expecting fast development process and good product quality. However, depending on your needs, you may not be able to use Flutter, because some services may do not support it yet. But in other cases, choosing Flutter may be a very good choice. Also check what official documentations says about it.