DEV Community

Cover image for Flutter, Google's one-stop solution for Native Applications
Souparno Paul for GNU/Linux Users' Group, NIT Durgapur

Posted on • Originally published at dev.to

Flutter, Google's one-stop solution for Native Applications

Ever dreamt of a framework that would enable you to develop native applications on the fly for all platforms, be it mobile, web or desktop? Yes, you heard right. Google's Flutter SDK is here to answer all our prayers! So let's dive right into it.

What is Flutter?

Flutter Logo

Flutter is Google's UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase. Applications on Flutter are built using the Dart language, also developed by Google, which is easy to learn and has a familiar syntax common to most OOP(Object Oriented Programming) languages.

Why learn Flutter?

To be honest, there are many other opensource frameworks out there, suited for developing native applications for different platforms. So, to go ahead and claim to be able to house all those technologies under a single codebase is quite a big statement, but the developers at Google are constantly putting in a lot of effort to live up to it.

According to the 2020 StackOverflow Developer Survey, a significant number of people have expressed an interest in developing with Flutter and intend to continue to do so.

StackOverflow Developer Survey

(SOURCE: StackOverflow)

There are quite a few factors that have hugely contributed to its popularity in recent years:

Write Once Deploy Anywhere

Developing apps using a native SDK comes with a huge disadvantage, namely the need to write code separately for different platforms. Android and iOS apps had to be separately written to perform the same tasks. With the advent of Flutter, the use of a single codebase to deploy apps for both Android and iOS has greatly simplified an otherwise tedious task.

Underlying Architecture

Flutter is designed as an extensible, layered system. It exists as a series of independent libraries that each depend on the underlying layer. No layer has privileged access to the layer below, and every part of the framework level is designed to be optional and replaceable.

Architecture

(SOURCE: Flutter)

The platform-specific embedder enables flutter to communicate with the underlying operating system for access to services like rendering surfaces, accessibility and input, and event loops, without having to write a single line of platform-specific code. Unlike other frameworks which rely on platform-specific widgets for rendering, requiring a property mapping layer for the platform widget and framework widget data synchronization, Flutter only needs to supply the application with a relevant Canvas element to draw on. Head here for more details on Flutter's architecture.

Faster Code Development Time

Native platform-specific frameworks require quite a lot of time to set up. A new application takes a lot of time to get shipped onto the test device and it may take seemingly forever for little tweaks in the UI to reflect on the test device. Although there is a layout preview option on Android Studio for Android apps, it might not work as expected while using a Custom View.

Features like "Hot Reload" and "Hot Restart" in Flutter tackle this problem in a very efficient manner, which makes it significantly faster. Viewing the changes on the test device, be it a small tweak in the UI to adding an entirely new customized widget, is as simple as pressing a button for saving the code.

An Extensive Widget Library

Flutter provides its developers which a vast collection of beautiful ready-made widgets to be included in projects. Most of these widgets have highly customizable properties for personalization and flexibility. If one isn't satisfied with the widgets already present, one can design his/her custom widget by extending the features of the base class Widget along with other relevant classes. This also contributes to faster development time.

The Skia Rendering Engine

Flutter is backed by the high-performance cross-platform rendering engine Skia. It uses the Skia Engine to paint on the platform-provided Canvas, without having to adjust it for specific platforms. This makes life a lot easier while working with Flutter and enables it to support a wide variety of features, unlike any other framework.

Skia logo

Highly Customizable Complex Animations

Perhaps one of the best features that Flutter offers is smooth eye-catching animations rendered at 60 FPS. With almost all the on-screen elements being customizable, rendering complex animations has never been any simpler. The level of difficulty is reduced manifold in comparison to native platform-specific frameworks.

Simple Platform-Specific Implementation

Flutter can support features exclusive to a platform, like providing applications with GPS coordinates, data from sensors and much more, thanks to ready-to-use plugins from Google. In case a plugin is unavailable, Flutter provides an easy of establishing communication between platform-specific code and Dart through platform channels. This makes it possible to implement any platform-specific feature in Flutter with a little effort on the native side.

Mobile and Beyond

In addition to mobile apps, Flutter supports the generation of web content rendered using standards-based web technologies: HTML, CSS and JavaScript. With web support, existing Flutter code written in Dart can be compiled into a client experience that can be embedded in the browser and deployed to any web server, enabling users to access all Flutter features without the use of a browser plugin.

Flutter Web Architecture

(SOURCE: Flutter)

Besides, Flutter supports the creation of native desktop apps for macOS and Linux, including the development of plugins.

What's New?

The Flutter team has been working hard to ensure a prominent presence on all opensource platforms. Following are a few recent additions to the Flutter family:

Canonical's Support for Linux Desktop apps built with Flutter

Last year, when Google announced desktop-class application support with Flutter, Canonical saw an exciting opportunity to make Linux distributions, including Ubuntu, an attractive target platform for Flutter app developers. Flutter’s native cross-platform story is growing rapidly and Canonical wanted to be at the vanguard. By enabling desktop Linux support in Flutter, Canonical is making it very easy for application developers to publish their apps for Linux users via the Snap Store, the app store for Linux. By making Linux a first-class Flutter platform, Canonical is inviting application developers to publish their apps to millions of Linux users and broaden the availability of high-quality applications.

CodePen Support for Flutter

Flutter on CodePen

With the ability to create Pens for Flutter, CodePen has empowered developers all around the globe to create and share their UI/UX designs on a public platform for inclusion in real-world projects. This provides starters with an exciting opportunity to learn by viewing the work of experienced developers as the code is readily available. It is a great step that is going to contribute to the popularity of the ever-growing community of Flutter developers.

A Newer and Better DevTools

DevTools is a standalone suite of tools that run in the browser. They provide additional telemetry and functionality that isn’t practical to show in the IDE. Up until now, the DevTools were written in Dart but recently a completely new version written in Flutter was released. The use of the Flutter framework helped enhance the UI and facilitated the addition of new features. The current version of DevTools includes a Flutter Inspector, Performance View, Memory View, Debugger and much more. It is a great tool to monitor the performance of Flutter apps on various platforms.

Head here for more on the latest news involving Flutter.

Limitations

Like every other framework, Flutter has its fair share of limitations, mostly because it is relatively new. Over the years we might see an improvement in the following aspects:

Support for Web and Desktop Apps

Currently, the stable release of Flutter includes support only for the mobile platform. In order to develop apps for the web and desktop platforms, developers need to download the beta and dev branches respectively, from Flutter's official GitHub repository, which is under constant development. We sincerely hope that the Flutter team can make the necessary bug fixes for these platforms and make them available on the stable channel as soon as possible. Head here for more information on the different Flutter channels.

Lack of Support for TVs, Watches and Cars

As of now, Flutter cannot be used to build apps for tvOS, watchOS, CarPlay or Android Auto. There is limited support for WearOs though. Though Flutter is not the best choice when it comes to developing apps for accessories, we can surely hope for better support in the future.

Issues with Native Platform Views

Though all the rendering in Flutter takes place through Skia, there are a few instances where one needs to use native UI elements like Maps and Web View. Flutter supports embedding these views but there are quite a few underlying issues.

Code Pushing to App Stores

Code pushing is the ability to instantly push patches to existing apps, without having to go through the entire app store release process. Flutter currently lacks this feature, so releasing bug-fixes can be a pain and generally takes some time to go through the standard release process.

Takeaways

Since its initial release in May 2017, Flutter has come a long way and it still has an even longer way to go. In my opinion, Flutter does provide a developer with loads of options in terms of personalization, flexibility and conciseness. It has the potential to be the top choice framework when it comes to native app development and we've seen many developers acknowledge its advantages. In the end, the question as to whether you should choose Flutter comes down to what purpose you need your application to serve.


I know it has been a pretty long article but thanks for bearing with me.

We hope you found this insightful.
Do visit our website to know more about us and also follow us on :

Also, don't forget to drop a like and comment below what are the features that you love about Flutter.

Until then,
Stay Safe and May The Source Be With You!

May The Source Be With You gif

Top comments (6)

Collapse
 
oripk profile image
oripk • Edited

hello! thanks for your article
Can I translate korean?
if you can, I wanna translated and upload my blog with this poster link.

Collapse
 
soupaul profile image
Souparno Paul

Sure, go ahead

Collapse
 
marc_codisio profile image
Codisio

With the latest release of Flutter 3 in May, a single code-base can be utilised to publish stable apps to iOS, Android, Web, Windows, Mac and Linux platforms. This breadth of cross-platform development capabilities will shift how applications are developed moving forward, especially during the MVP and validation stage of the start-up journey.

After developing and launching 4 Flutter applications in the past 2 years I've been impressed with the ease of deploying Flutter to different platforms. I look forward to seeing how Flutter will pave the way for changing the cross-platform development process, even if it involves constant updates to align to new Flutter versions!

Collapse
 
pablonax profile image
Pablo Discobar

If you are interested in this, you can also look at my article about Flutter templates. I made it easier for you and compared the free and paid Flutter templates. I'm sure you'll find something useful there, too. - dev.to/pablonax/free-vs-paid-flutt...

Collapse
 
burhanuday profile image
Burhanuddin Udaipurwala

I have done few small projects in Flutter and the output is great for mobile apps. It performs better than React Native. I have only one pain with Flutter really: Dart
The way that you build UIs in Flutter feels less fun when you compare it to React Native or Ionic or even native Android where you get that familiar XML and HTML like syntax.

Collapse
 
soupaul profile image
Souparno Paul • Edited

True. It might seem a bit intimidating and unconventional at first, especially the huge nested structures. However, as time progressed, I did fall in love with the Object-Oriented approach in Dart since setting the properties of Widgets is very relatable to specifying attributes while building real-world objects. But again, it all depends on personal preferences 😅