Flutter based application development for Share Market
What is Flutter?
Flutter is an open source framework developed by Google. It can be used to develop mobile applications for iOS and Android (in future also for desktops and the web) with a code base. This means that development does not take place on a platform-specific basis, but in a programming language and in a programming environment.
Programming language: DART
In the case of Flutter, the programming language is DART, which was also developed by Google. It is relevant in perspective when Google's Fuchsia OS comes onto the market. Because the applications for this operating system should be created with DART.
DART is similar to the established object-oriented programming languages such as C #, Swift or Java. A text editor is theoretically sufficient as the programming environment. Of course, it makes more sense to use z. B. Android Studio or Visual Studio Code.
Real native application for end devices
The rendering takes place via a C ++ 2D rendering engine Skia, which is also used in Google Chrome, Mozilla Firefox and many other products. It can also be used to implement extensive programmatic (UI) and pre-made vector-based animations. The vector animations can e.g. B. with the help of flare so that they can react to different states of the application. Clever!
As in React Native, the functions do not influence the UI directly, but change the state of the widget or the entire application (unidirectional data flow or reactive programming). This means that only the part of the interface that is affected by the change in state is re-rendered.
The SDK offers a large library of customizable widgets that can be used to implement the UI directly. Some of these widgets are platform-sensitive and automatically implement interactions typical for operating systems (e.g. edge swipe on iOS). In addition, there is a large selection of additional modules from third-party providers that can be obtained via dart packages and integrated into the app.
Everything is a widget
The widget thinking is what makes Flutter so special. The app itself is a widget. A button is a widget. Even the simple text is a widget.
So every element of the application can be changed and adapted. Completely custom widgets can also be developed with relatively little effort. Existing widgets can be expanded with additional features. They are treated like objects. Can respond to changes in status. And work with records.
Although this widget thinking is not intuitive at first and the feature set of some elements is very different, it allows great flexibility in the development of the application.
Development using widgets means that everything becomes part of the source text. The UI elements are described in the same file as the functions of the application. Unfortunately there is no visual layout tool either. Non-developers like me have to worry if the layout doesn't work as intended. A storyboard or layout tool like in Xcode or Android Studio would significantly simplify access to the framework.
I have already started evaluating the framework. Here are the pros and cons of Flutter that I noticed.
In the current release, Flutter brings some very good features and workflow ideas. I particularly noticed the following:
Basic elements of the UI such as navigation drawer, tab bar, button etc. are part of the SDK.
They do not have to be developed.
Versatile UI modules included
These support expected interaction patterns and are designed to be appealing.
The app performance is good in most cases.
Since the JS bridge is no longer available, CPU usage is close to that of native applications. Flutter apps, however, are characterized by a higher memory consumption - especially in comparison to native and react-native applications. It is questionable whether a flutter app can really become so extensive that RAM use (apart from power consumption) becomes a problem.
Simple implementation of the data streams with the BLOC pattern.
This means that applications can be implemented quickly that always present current data to the user (in the style of Instagram, dribbble and similar apps).
The changes in the source text are applied without having to restart the app completely. That was new to me, who comes from Unity3d and C # development. And: I think it's great.
DART is a pleasant and complete programming language.
It shows enough similarities to other object-oriented languages - in the syntax and in basic development mechanics. This makes access easy. You can get started right away
Flutter in the future
The SDK is being actively developed. So a lot can and will change. Above all, I will keep an eye on these developments:
The next extension presented - is to enable code sharing with web components in Flutter. This would make the framework much more universal and would bring it closer to how React Native currently works.
Compilation of projects for desktop
It is still unclear how and whether this will be solved.
Areas of application
Due to the relatively simple development and the associated lower expenditure of time and resources, Flutter is particularly suitable for the following areas of application:
Conceptual proof of an app idea that can be checked on a device. A kind of click dummy with placeholder content that conveys the idea interactively.
Creation of a function prototype, expanded by actual data records, network resources and own functions from the click dummy. This is particularly suitable for communicating the idea. It provides information about the expected development effort.
Module development if an existing native application is to be expanded with additional elements. Especially when these modules are in an active test phase and subject to constant change, you benefit from short development times.
Applications with a manageable scope that are likely to have a rather small user base. These can be developed entirely in flutter.
Ideas with a lot of potential and first mover advantage, the financing of which is not yet fully secured (start-ups, company projects). Flutter ensures that you initially reach a maximum target group (iOS and Android).