Created by Maximilian Schwarzmüller
    Last Updated on May 01, 2019

    Flutter is a framework and SDK that allows you to build native mobile apps for iOS and Android with one language (Dart, which is fairly easy to learn) instead of the native platform development languages (ObjectiveC/ Swift for iOS, Java for Android) you would have to learn otherwise.

    This does not only sound nice, it also is pretty fun to work with!

    You save a lot of time because you don’t have to learn two different languages, leave alone write two different apps.

    And the Dart syntax is also quite nice and especially easy to pick up if you already got experience with languages like JavaScript, Java or C#.

    I got a complete course on Flutter + Dart in case you want to learn it from scratch!

    I got a similiar article on React Native’s Future - React Native is an alternative to Flutter which follows a comparable philosophy but uses JavaScript + React.js instead.

    # What’s good about Flutter?

    Flutter is easy to learn, under active development, backed by Google and growing strongly!

    With Google being the developer and maintainer of Flutter, you can also rely on it not going anywhere. Google also acts as a marketing machine since it does not only have its reputation but also uses Flutter in internal apps - this proves that Flutter is a real alternative for real (enterprise-level) apps!

    Flutter also is relatively new, it reached version 1.0 at the end of 2018. This implies some disadvantages (see below) but it also means that we’ll still see exciting new features being added and more and more resources to be released. You also got more influence on its future development - posting in the Github issue section or providing pull requests is a good start.

    It’s also worth noting that the team behind Flutter is not just working on Flutter’s core but also on a rich suite of plugins that allow you to tap into native device features like the camera.

    That matters a lot because Flutter does not include any such native-feature bindings - it provides a bridge which you can run native device code with though.

    Whilst this allows you to integrate any native code of your choice into your Flutter + Dart app, it also means that this native platform-specific code has to be written by someone. If that’s you, it also means that you still have to learn at least a bit of ObjectiveC or Java.

    The mentioned plugins take that task away from you - they provide both the native platform code and the integration into Flutter + Dart. Hence you simply execute some Dart methods and use the native platform features under the hood.

    It’s good, that the Flutter team itself works on those plugins as that ensures that the plugins are up-to-date and well-maintained.

    # What could be better?

    As mentioned, Flutter is relatively young. It has been in development for a few years but really only got more attention (internally and externally) like a year ago.

    That also means that there will still be some bugs, missing features and unclear practices or patterns. The frameworks simply is yet to mature - and right now, it’s still under highly active development. You therefore should be prepared to learn more about it over the coming months.

    As with all these cross-platform approaches, you also have to be aware of the fact that there will be frustrating moments.

    You might be building an app that requires a certain feature that just isn’t supported by Flutter. Hence you either need to write your own native code or use a (third-party) plugin - if such a plugin exists.

    Searching for such solutions and working around bugs or issues can be frustrating and time-consuming.

    Overall, you typically save more time than you lose though - you still save all the hassle of learning two different languages and writing two different apps after all.

    Speaking of “two different apps”, it’s also worth pointing out, that Flutter doesn’t (currently) give you widgets (the building blocks of Flutter UIs) that automatically adopt to the platform the app is running on. It’s not clear if such a feature is coming, for the moment, you need to manually determine the platform and render different widgets.

    That gives you more flexibility but can also lead to more code being required.

    # What will change in 2019?

    In 2019, the Flutter team will continue working on these core plugins to bring them up to the same level as Flutter itself.

    They also got plans to offer more pre-styled widgets that meet iOS’ design specifications. At the moment, you can still clearly see that Google’s Material Design was the target design originally.

    In general, the goal clearly is to polish Flutter and to get rid of bugs or weak spots it might still have.

    I would also expect, that we see more patterns to establish and best practices to emerge.

    You can find a detailed roadmap here and you can also check the (planned) monthly issue progress here.

    # What will change in 2020+?

    In 2020 and the years thereafter, the Flutter team will of course continue to work on Flutter and polish it more and more.

    They are also working on a project called “Hummingbird” which has the goal of allowing you to use one codebase to not just build iOS and Android apps but also to build web apps from it. If that works out, it’s a pretty exciting idea!

    Maybe - and that’s really hard to tell right now - Flutter might even replace Android development, as we currently know it, in the future.

    # Summary

    Flutter is still maturing and therefore has its rough edges, missing features and bugs.

    But it’s extremely promising and already pretty fun to use!

    The Flutter team is putting a lot of effort into it and I would expect that we see more and more issues to disappear in the near future.

    This then leaves more time for developing cross-platform apps with a single language and framework!