Google is known for moonshot projects. Often they're just that, without much hope of being brought to fruition in the near future. But Flutter is not one of those: it's here now and it works, wonderfully.
Flutter was released back in 2017 as a mobile development framework aiming to seamlessly bridge Android and iOS development without taking away any control over the hardware and low-level operating system features from the hands of the software developer, like many other frameworks do. It got lots of attention because Google showed impressive performance results, which are achieved thanks to the use of a low-level rendering engine that doesn't rely on the operating system's native interface elements like similar technologies such as Facebook's React Native do.
It also got so much attention because it is being pointed to as the primary way of developing apps for Google's upcoming Fuchsia OS, which is set to replace Google's current operating systems. Developers also loved the top-notch developer tools allowing, among other things, to instantly preview the result of changes to the code without having to compile the app.
In addition to being one of the main topics of many conferences dedicated to Dart, the Google-developed programming language used to develop Flutter apps, Flutter has been discussed, presented and advertised for a significant amount of time at Google I/O ever since Flutter's initial release in 2017, and we saw that especially in 2018, when Flutter was really being pushed by Google in anticipation of its 1.0 release in late 2018.
Google I/O 2019 went one step further: experimental support for desktop and web platforms was released, setting forward a vision for a world in which a piece of software doesn't have to be exclusive to one platform: it doesn't matter what platform you need to support if Flutter is powering your app: it doesn’t matter whether they’re phones, tablets, computers, TVs or embedded devices.
Flutter is not just a big tech preview: it is being used in production today by big companies. Google themselves recently released the official app for Google Stadia, their well-known upcoming game streaming platform. Google also lists companies such as eBay, BMW, AliBaba, Tencent and other companies worth several billion dollars as Flutter users and one of the early adopters of Flutter in early 2018 was the Hamilton musical's app.
Away from mobile platforms, "The New York Times" has built some of its web-based digital puzzles in Flutter, that you can see at this link.
Flutter is reality and it ought to be exciting for everyone: it could be about to bring down the last of the barriers stopping us from forgetting about the underlying interface entirely and think of applications in a way that is only dependent on the choices of the programmer and the requests of the users.
You might be wondering what exactly you can expect to be built with it. The answer can be found in more than one way: the first is by taking an inductive approach, looking at what has been built with Flutter.
The most obvious example is something like the Hamilton app I mentioned above as the first major app using Flutter because it’s what most people think of when talking about a typical Flutter app. It’s an app that takes up-to-date information from the Internet and shows the information to the user with an unique aesthetic style in multiple layers, mixing everything from news-like sections to trivia quizzes.
This is a mix of some of the most common features in mobile apps, but we can highlight Flutter’s flexibility further: it has control over the screen, so games with custom graphics and animations (like the New York Times puzzle linked above) can be built with it, with the same framework that implements easy-to-use classes for all of the components of Material Design and the iOS design language.
So Flutter can do anything visually. But we haven't talked about what it can do with the hardware and low-level OS interfaces. To find that out, we are going to take the deductive approach.
The short answer is: anything a native app can do, and the reason for that is that Android Flutter apps can run Java/Kotlin or native C++ code just like regular Android SDK apps, Flutter iOS or macOS apps can run native Swift or Objective-C code and Linux apps can run native C++.
To any programmer, this simply means that the app has full access to the device's capabilities. An example of that is a project of mine that aims to build a Flutter app that can manage filesystems on Linux by interfacing with Stratis, a Red Hat-developed storage management utility.
Flutter is even starting to be considered by Linux GUI developers as a potential solution to the inconsistency among different desktop environments, and the people in charge of putting together Linux distributions are taking note and starting to consider putting some effort into making Flutter desktop support even better.
Flutter's unparalleled flexibility means there will be no duplication of effort in software development teams, increasing their productivity and eliminating any feature gap between versions of the same app developed for different platforms.
This is revolutionary and is already taking over market share in the mobile world, all that’s left to see is whether it can adapt and succeed on the other platforms, but with Google behind it and after seeing how many companies are investing heavily into it, it looks like it will change the way software is developed, making it easier for everyone to find high-quality software for any platform, be it a phone, a tablet, a computer or even a completely different kind of device, such as a car’s infotainment system, a smart home device or a smart TV.
<img src="https://imagery.pragprog.com/products/578/czflutr_xlargebeta.jpg?1560360708" class="mr-4" alt="...">
<div class="col-md-8 text-center text-md-left"> <h3 class="mt-0">Get a Complete 300-page Introduction to Flutter!</h3> <p>I’m so excited about Flutter I wrote a book about it called Programming Flutter with the Pragmatic Bookshelf.</p> <a href="https://pragprog.com/book/czflutr/programming-flutter">Check it Out Here</a> </div> </div>