As a newbie to Flutter, you might have/not have come across it in detail. This post explains why it’s essential to have a 360-degree perspective when it comes to choosing the right technology for your product.
When I started my career as a developer a decade back, we had a handful of technologies/frameworks to choose from for building a web app. PHP, CodeIgniter, CakePHP (to name a few) were the go-to tools for developers to deliver custom web solutions to clients.
Talking specifically about developing apps for iOS/Android, I remember using Java and Objective C. Fast forward to recent years, and you see developers using Kotlin for Android, Swift for iOS, etc.
In recent times, we see new, more efficient frameworks coming up. I mean it’s exploding out there. For web apps, you have VueJS, AngularJS, NodeJS and what not. As a product owner, one can go crazy when being asked to choose the right tech-stack (be it for web or mobile).
So, when a new framework/technology comes up, the confusion only grows.
And as product developers, it’s imperative for us to be adaptive or else biting the dust is our only option. I have had to let go of a few of my developers who were not willing to adapt to Kotlin for developing android apps. It was a tough decision for me, but then I don’t make the rules of the game. With a heavy heart, I have had to part ways with them. You can’t build stuff using outdated technologies, can you?
But at the same time, you have to be cautious enough to understand in what circumstances the new technology is right for business. You don’t want your ass to get chewed by your boss/customers/business partner. Do you?
Coming to recent times, Flutter is (as many like to call it) the new tech-kid on the block when it comes to developing native mobile apps.
One of the reasons for writing a post on Flutter was — we see a lot of enthusiasm surrounding it. (It is, no doubt, a budding and excellent framework for building cross-platform mobile apps). However, it is not suited for every mobile app. Some might debate you can develop even games with it while some might say it is for your toy projects. So, how do you decide?
Here’s what you will understand from this post -
- What is Flutter?
- What is making Flutter Development so exciting for both startup founders & existing app developers?
- Some useful case studies of apps built using Flutter.
- When does Flutter look like the perfect fit for your idea?
- What’s the future of Flutter Mobile App Development?
As a product design & development agency, we regularly have to make decisions or brainstorm with our clients about what route to go for building an app — native or cross-platform or iOS first/Android first including choosing the right tech-stack.
For both native and cross-platform, you have a fantastic set of frameworks available to build an app the way you want to. However, Flutter seems to be winning the ‘native’ game in the past few months. Let’s see why and where it can be used and where it can’t.
If you are a photographer or an independent architect, you know a platform like ‘Squarespace’ is a godsend. When you don’t have those big bucks to pay to a professional designer and can still get an elegant looking site, nothing like that.
When Flutter, the mobile application development framework, was launched in May 2017 during the Google IO Developers Conference, it looked (& still is) promising for developing cross-platform apps.
Maximilian Schwarzmüller, a well-known web developer and course instructor at Udemy very succinctly explains what Flutter is -
As a software development kit, it lets you build 2D mobile apps (in case you are looking to build gaming apps, Flutter is a big no-no) using Google’s in-house programming language called Dart. Using this language, you can write a single codebase and build native apps for both iOS and Android. The framework has a set of utility functions, classes and objects which can be used to write features for your app instead of coding from scratch.
With Flutter, you only need to learn Dart to build your app for Android as well as the iOS App stores. No, Java, no Kotlin, no Swift. Only Dart.
The above chart shows the increasing popularity of Flutter on Stack Overflow.
Before we delve into what is making ‘Flutter’ one of the most loved cross-platform mobile application development frameworks, it’s essential to understand how it all started.
Eric Seidel has a rich background in ‘Rendering’. And, when Flutter was started as a project three years back, this background would help Eric and his team mould Flutter into what it is today. They wanted to do something better for mobile, and ‘rendering’ is where Eric’s leverage is (as he likes to call it :) ) When he used to be on the ‘Chrome’ team, they were trying to address some hard problems — making specific parts of the web smooth. This led them to do some experiments, and this is where it got interesting. The team started removing old compatibility supports from obscure websites. They removed a lot of things and reran benchmark tests. What happened, just blew them away. Watch the full interview here — Coffee with Googler.
Randall Schwartz, a well-known software developer, explains how flutter came into being —
So the Chrome team said, “What if we could start over and not implement all of CSS? Not implement all of the layout rules, like Flex and things like that, RenderBox? Things like that.” So they ripped all that out, and they got a much better experience. Okay. But it still wasn’t enough. So they had been paying attention to what the Dart team was doing and said, “What if we use a language like Dart as our implementation language?”
So they went to the Dart guys and said, “Here’s what we need. We want to put this in.” They took the rendering engine from Chrome, which is called Skia, S-K-I-A, which is a way to control every pixel on the screen. So that’s what Chrome uses to be able to draw on the screen, and there’s also a text engine.
They took those two parts of Chrome, and they said, “Let’s start with that and let’s build Flutter by building Dart up from there.” So what Flutter essentially is, is using the Dart language to control every pixel on the screen using Chrome’s native rendering engine and Chrome’s native text engine. That’s how it came around.
As a developer, you know the frustration of this approach — compile, deploy, wait for the system to boot up, wait for it to execute the code, wait for the debugger tool — it’s all waiting, waiting — and that’s when you realize you missed something important and have to go back again.
For many mobile developers, this makes them fall in love with Flutter at first sight. It has a built-in Cupertino and Material design widgets which make it possible to create aesthetically pleasing UI designs. From using rich animations to sophisticated motion graphics, Flutter will help you create amazing interactions. And, this is the key to delivering an excellent user experience. Static UIs don’t help achieve this.
My ‘designer’ friends have come across situations wherein they had to compromise their vision/creativity. Too many times, a designer creates a layout, does some beautiful animation/transitions to deliver a superb UX only to be let down by developers (endless reasons from not having enough time to expertise levels). With Flutter, no more compromises.
Everyone in your team from designer to developer & testers can work together in seconds to fix issues without causing headaches.
You might ask what about native features like scrolling, navigation, fonts, etc. Flutter has been built keeping in mind platform differences. Custom widgets can also be developed depending on one’s needs.
Flutter has its own rendering engine. This is what makes app development faster, easier and performance oriented. From quickly building UIs to fixing bugs, HotReload brings down the reload times to milliseconds.
What this means is, when you make some changes to your code, you can instantly preview these on emulators and hardware. (Remember, when you make a change to your Squarespace website and hit the preview button). It’s that fast. This essentially translates to quicker time to market for your product/app. If you are thinking of launching an MVP, Flutter might be the right choice for you.
Many experts believe that testers don’t like to find bugs (contrary to public opinion). Their job is not to find bugs but to improve the quality of a product. Ask any tester to test the same feature twice-thrice; you’ll often see him/her frown.
Furthermore, when we as developers have to work on tickets raised by customers (if you have native apps, you’ll have to work separately for iOS & Android because of feature differences), things can get frustrating. Not all concerns raised by customers/users are specific. Every time, you can’t go back to the product team to understand the specifics, and you have to take those small decisions on your own. For two different platforms, this means making changes accordingly. For users, this is not an issue because very rarely someone will be using iOS and Android devices at the same time. Sometimes these changes are not noticeable.
However, with UI this is not the case. It will be visible. How do you know which is the correct behaviour? With a single codebase, these frustrations don’t arise. There will be significantly less testing. Once a tester has tested Flutter based iOS app, he/she will know how the feature works and then moving on Android app will make things easier.
From biggies like Alibaba to enterprise app platforms, companies across the globe are using Flutter to build a wide array of apps.
100% open-source, cloud-based invoicing software for freelancers and businesses. From creating invoices to viewing your client activity on a dashboard, Invoice Ninja offers tons of features.
A perfect example of a multi-platform app. 40% of code sharing happens between web and flutter. It’s also a progressive web app built with AngularDart. Android and iOS apps are built from a single codebase.
View lists for Top Rated, Now Playing, Upcoming movies, etc. It’s somewhat similar to IMDb. One can also view details of each movie including cast and browse movies by genre.
EarthRise is a climate change activism app allowing people to see talks, meetups, and protests in their area/local timezone. One can also see daily scientific measurements of carbon dioxide, temperature anomaly, and sea ice extent.
Didier Boelens managed to build a working prototype of CandyCrush like game using Flutter since he was interested in seeing how to use Flutter to create board games.
The travel app for knowing popular routes on your journey, discovering nearby places and much more. It uses advanced machine learning and data science techniques too.
Can you integrate an existing app with Flutter? And, should you convince your boss/co-founder to use it?
Yes. (Of course depending on what type of app you own). The following case study will be a helpful reference point.
You might have already developed a native app for your business when flutter came along. What now? You can’t just discard that app and redo the whole thing. Well, Flutter can be integrated with an existing app.
Groupon Merchant App is a prime example of this. Tomek Polański managed to convince his team at Groupon that Flutter was worth the try.
Groupon has two apps — customer-facing and merchant-facing. The customer-facing app is huge with over 50 million downloads. On the other hand, the merchant app is significantly smaller (500K+ downloads). So, it was comparatively less risky and easier for the team to integrate Flutter there. Also, because the team that handles the merchant app is smaller in size.
In his following talk at droidcon London last year, he discusses the approach he used to convince multiple teams at Groupon. Understand what worked and what did not work for them.
Flutter is the perfect choice for developing UI-heavy apps. When you don’t have a designer by your side or are just wanting to quickly test the market, Flutter may be the obvious route to go.
However, since Flutter is still developing (though it has passed the beta stage), libraries still seem to be an issue with developers. For instance, when you have to work with something like sensors, you will need to develop your own library for it. Again, apps which require too much communication with third-party applications, complex databases and deep integration with the Android/iOS system, native might be the way to go. You will have to see which demographics & other factors you are targeting and accordingly choose, whether to go iOS first or Android first. Another example would be of an app that requires heavy image processing. Right now Flutter seems to be lacking on a decent library for this. In this scenario, React Native might be the way to go.
Another limitation developers encounter is integrating maps. Though Flutter can embed Google maps, it is certainly not a cake-walk.
Plus, hot reload has its own limitations too.
If you are a product owner, thinking to adopt Flutter — just make sure you analyze its existing ecosystem, types of libraries it has based on your app features, long-term goals, etc. Flutter based mobile app development will definitely be picking up. However, those product owners who are targeting high-quality apps with a focus on large earnings, native might be the way to go still.
Some interesting resources you might want to check out —