Flutter is Google's software development kit for creating cross-platform Android and iOS applications
It makes it easier for an Android developer to develop iOS applications and vice versa
Flutter has packages for Google's Material design UI and iOS's Cupertino widgets to yield a similar design for an application in Android & iOS
Flutter applications are written in Dart which is compiled into native code
Due to this the performance of a Flutter application is comparable to a native Android or iOS application and is typically faster that web or hybrid applications
A typical Android application is written on Java language while iOS applications are developed using Objective-C / Swift language
To develop application supporting both Android and iOS, different codebases using different languages are required to be maintained
In such a scenario, a framework like Flutter can help to create cross-platform applications with similar user interface and behaviour through a single codebase
List of some of the features of Flutter:
High productivity
Since Flutter is cross-platform, same code-base can be used for an iOS and Android app
Performance
Dart compiles into native code and there is no need to access OEM (original equipment manufacturer) widgets as Flutter has its own
This means less mediated communication between the app and the platform, since it doesn't require any javascript bridge
This contributes to fast app startup times and less performance issues
Smooth UI
Flutter has packages for Google's Material design UI and iOS's Cupertino widgets to yield a similar design for an application in Android & iOS
Customizable
While it offers an extensive library of pre-built widgets, custom widgets can be built and existing ones can be customised
Fast development
Flutter's hot reload which allows to instantly view the changes made in code on a real or virtual device without requiring a restart
Similarly, hot restart allows to restart an app with its states(unless there's local storage involved), without requiring to rebuild
This is quite handy not just for building UIs or adding features but also for bug fixing
Simplicity
Flutter claims in its docs that programming with Flutter is so easy that no prior programming knowledge is required
Compatibility
Since widgets are part of the app and not the platform, less or no compatibility issues is expected on different OS versions
Testability
Flutter has modular UI testing built into the framework
It allows to drive, test and assert UI logic at different levels such as layout, gestures, animations, text layouts, colors etc
Also, it can run in headless mode without any device or simulators
Open-source
Both Flutter and Dart are open-source and free to use, and provide documentation and community support to help out with issues
Community
Flutter has been able to attract developers at a fast pace, and community seems to be expanding facilitating a variety of third party plugins and packages
App size:
Flutter apps can be comparatively large for some cases
Dart language:
Although it can be easy, Dart is comparatively a new language
A Javascript developer who wants to move towards Mobile application development is more like to find React-Native easier as it uses Javascript
DART is similar to Java/C++ style of programming
intermixed UI and logic:
In Flutter, user interface and logic is intermixed which can make code seem messy and jumbled
This can be overcome using high level module to separate user interface and logic
Libraries & support
Developers building native Android and iOS apps may be put off
Flutter might not be your platform of choice when you're developing games or an app that requires a lot of device-specific functions
Check Flutter Showcase
Check setup and example applications