Welcome aboard Flutter! - why we chose Flutter to accompany our native mobile technology stack
In this article we share our thoughts and experiences with Flutter - a technology from Google that allows to create iOS and Android applications with single codebase.
In Appunite, we believe in technology, but not just any technology - the right one. The battle between native and hybrid mobile apps development has been raging for some time now with more or less promising contenders. We never thought that any of the available frameworks such as PhoneGap, Ionic, Xamarin or React Native felt right for what we strive for. Therefore, we stuck to reliable and predictable native mobile development. But, sometime ago, a newcomer joined the hybrid club - Flutter, a cross-platform framework from the software giant - Google. How is it different? - you may ask - it’s not a webview wrapper like many others, it compiles to native widgets making it perform almost as efficiently as a native app. Some of you may think that a second of a boot time difference is not that much, and you might be right, but a second more means the world for us.
So we’ve been testing it for some time now and after two successful projects and yesterday’s introduction of Flutter 1.0, we have decided to officially jump on the bandwagon!
Flutter feels right for what it promises - a framework to built lightweight applications for both iOS and Android in record time. Are you a publisher that serves news? Are you an e-commerce website and need an app? Maybe you want to create an urban dictionary? Flutter got you covered (We got you covered too ;)).
Here are some thoughts from people in our company that have worked with Flutter:
Doris - Quality Assurance Specialist
- Thanks to Flutter, I am able to ensure that there will be no differences between platforms as we maintain a single codebase. It decreases communication overhead and makes my work faster.
- The fact that designs are prepared in one version makes the testing process less comples and therfore saves a lot of time usually spent on comparing the designs with the actual mobile application.
- New features for both platforms are deployed at the same time. This allows parallel testing on both platforms.
- Sometimes errors that may occur are platform specific, so unfortunately using Flutter does not mean we can test the app only on one device and one platform. Tests have to be run the same way they are during the development of native apps.
Pawel - Android Developer
Flutter pros:
- It’s fast to create views
- Handling forms is really easy
- Automatic support for states through StreamBuilder (in-progress, error, success).
- Relatively easy way to build complex vies (thanks to widgets)
- If required, we can use “platform-channel” that allows to switch to native on both iOS and Android
- Ability to add “Flutter” views to already existing iOS and Android apps.
- Lots of plugins (https://pub.dartlang.org/flutter) for almost everything - camera access, GPS, bluetooth, etc.
- Great support for sockets
- Support for Protocol Buffers
- Blazingly fast hot-reload for viewing changes instantly
Cons:
- A few of small UI/UX errors/defects, i.e. couple of cursors in one form,
- Not a great selection of available libraries, you have to do with what’s available.
- Big APK size
- Beta was not so stable (after updating Flutter, builds are not building)
- Lots of unresolved issues on GitHub
- No full Android Studio support, i.e. lack of automatic custom class suggestions
Andrzej - Business Development Manager
- Flutter introduces a new opportunity in commercial development that frameworks, such as React Native, despite their popularity, failed to address, in my opinion. We can now develop lightweight applications without compromising the performance. It’s a great balance between native and hybrid development languages.
- Adding Flutter to our tech-stack will make our offer more comprehensive and competitive. We have been losing on opportunities where clients preferred to maintain single codebase for both iOS and Android. With Flutter, we can address our clients’ needs even more than we have been able so far.
- Flutter does not seem to fight for the throne with native. Instead, its ambition is focused on smaller applications. This is especially tempting for those companies, which are hesitant about investing a huge piles of cash into a mobile app project if its not their main source of revenue. The popularity of other cross-platform languages proves that native development is not always the best fit for conscious businesses.
- A side-effect for a company, such as ours, is that Flutter will probably teach us more about using native widgets that usually are not our first choice. This means that this hybrid framework will improve our native skills.
- On the other hand, Flutter is still relatively new and it will take some time and effort to gain trust and popularity among decision makers. Nevertheless, if we look at the popularity statistics on platforms such as Stack Overflow or GitHub, it's clear that Flutter is creating quite a lot of buzz around itself.
Miłosz - Project Manager
- There are 3 main factors that we think about when testing new technologies like Flutter -> Quality, Stability and Maintainability. A lot of our projects reach the scale of >100k monthly active users, so at this point, we want to make sure that not only development goes smoothly, but also if maintenance will go right when our apps are installed on numerous Android and iOS devices and besides our code, we will also have to struggle with a code of manufacturers, launcher creators, different types of screens etc.
- When I think about quality as a Project Manager I ask myself -> can this technology deliver what we designed and if we are going to meet clients expectations. For Appunite, Flutter is quite a big improvement as the work is going very fast due to the need for only 1 developer per 2 platforms. The ecosystem is not as rich as for native languages, but we can still find plenty of libraries and have Touch ID support, Protobufs, dynamic forms etc.. We have had only 1 problem so far, where we had to write native library for video call support and integration with Twilio SDK as there was no support for Flutter.
- Then it's about stability. What is the crash-free ratio going to look like? Are there going to be any strange bugs that are difficult to solve due to the nature and architecture? So far Flutter has been working here very well. We have tens of testing devices and so far there have been no problems that stopped us from development. Occasional crashes still happen, but they are not so hard to track down.
- The last part is maintainability of the code, so how the app is going to act when we reach higher growth goals, how difficult it will be for different developers to learn the code and if there are any special needs around it. So far, I have not been able to answer this question as our Flutter project is going to meet production in about a month, and there have been no changes in the team.
Piotr Mądry - Android Developer
Dealing with new technologies, searching for the solutions that will improve and speed up the work process is a thing that every software house is facing. That's why we have decided to spend some time to play with Flutter and check the benefits that it can bring us. My goal was to recreate the most complicated screen from one of our existing apps for both Android and iOS. The major obstacle I’ve faced was the approach to mobile development. If you want to sit to Flutter and do the great things, you need to change the way you are thinking from native to more “fluttered”. However, at the end of the day, I was startled by how fast I can build views with animations, do the requests calls or even draw a chart. Moreover, there was no difference in functionality or how the app behaves for both Android and iOS. It would not be surprising that Flutter might be an important player in the mobile market in the near future.
With Flutter, we feel that our offer is complete. We can bootstrap and kickoff a small project with just one mobile developer for both iOS and Android and not compromise quality and maintainability anymore.
Let us know in comments your thoughts and experiences with Flutter!