Time to Learn Flutter, or Stick to Native Development?

After spending 2018 in the incubator, Google has fledged Flutter as a cross-platform framework for every screen we use. But should developers adopt it, or stick to native app and web development?

At I/O 2019, Google announced Flutter is now available as a cross-platform user interface design platform. Initially created for responsive mobile app design, Google made the call to also release it for websites and desktop apps. In addition, it’s being prepped for the Internet of Things (which Google tags as “embedded” devices) via Google’s Nest products (such as the Home Hub) and will make a home on Chrome OS.

In late 2018, the framework reached version 1.0, which Google dubbed the “first stable release.” That came after it shoved Flutter into a beta period in February 2018 (a moniker it removed in June of that same year).

Flutter for the web is in a “technical preview” period, but is a natural fit. Critically, it uses Google’s Dart language, which compiles to JavaScript, positioning it as useful for the web in addition to mobile. Flutter for mobile has reached version 1.5, while Flutter for desktop is now available for Mac, Windows, and Linux. It also helps Chrome OS become a developer-friendly platform; Android Studio and Visual Studio Code can be used on Chrome OS devices, both of which support Flutter and Dart development.

Two notable Udemy contributors, The App Brewery and Dev Slopes, both released Flutter courses during I/O. For $10, you can take over 30 hours of coursework to learn the framework, which sounds like a great deal. But is it worth it?

Flutter or Native Development?

If you examine the evidence, it’s clear who Flutter is meant for at this time. Google held a unique contest ahead of I/O; the winner made a compass app. The scope of the contest was limited by file size: all submissions had to be 5KB or less of Dart code. (Incidentally, Dart is now at version 2.3, which improves its use as a UI language, and adds more features to help it work better with Flutter.)

Flutter also sidesteps visual design principles. If you’re coming from iOS, you may find Flutter’s lack of a Storyboard frustrating. All design must be done programmatically, which is understandable since things such as button padding should be responsive to multiple screen sizes, but it can be a jarring change. Material Design is mandatory across the framework, too.

The Flutter ’Showcase’ website underscores the light touch Google’s design framework offers. There’s simply not a lot behind Flutter; the apps in its ‘Showcase’ are fairly simple and straightforward. That’s fine. Advocates will note Flutter works with Firebase (which has some intense features, such as machine learning), and has popular options such as Facebook sign-in and access to the device’s camera or GPS sensor.

Beyond that, you may have to write your own plugin if there’s native functionality you want or need. Currently, the Flutter/Dart plugin ecosystem is good enough, but not great. Another consideration: How many private APIs you’ll want access to via other platforms, because those can’t be recreated.

For most applications, Flutter and Dart will do just fine; they just have the same limitations as any other cross-platform framework/language such as React Native. If you need something more robust (a mobile game or augmented reality, for instance), true native development is still preferred.

6 Responses to “Time to Learn Flutter, or Stick to Native Development?”

  1. Ryan Edge

    Material design is not mandatory. There is a suite of Cupertino elements that recreate Apple’s UI. There are also low level widgets for building custom UI. The widget catalog is your best friend: https://flutter.dev/docs/development/ui/widgets

    Also, to say each cross-platform solution has the same trade-offs is a bit inaccurate. Flutter for example has no bridge so it does not suffer from the same latency one might have when executing native plugins in React Native or Cordova.

  2. Jeroen Meijer

    Please read into the above, Nate.

    I understand the confusion (since it probably stems from the fact that in almost all projects, people implement the ‘material’ package) but saying Material is mandatory is simply misrepresenting Flutter’s flexiblity and doing it a huge disservice.

  3. Tensor

    This article is really silly and it’s doing a disservice to the mobile community. Flutter doesn’t require material design; you can build whatever theme you want and use Cupertino. Assuming that flutter is better in smaller apps because they held a contest is also really misleading. I’ve built and used huge flutter apps that run the same and sometimes better than any native offering. This isn’t react native or Cordova, you compile to native byte code and you get multitheading out of the box. You can use any API that is a part of the Android and iOS ecosystem and it’s not hard to build a custom interface for these things. Performance and interopt are non-issues for flutter.

    Apple just announced swiftUI and Android has a few programmatic UI toolkits. You’ve got tons of hot web libraries that focus on declarative UI elements like react, Vue and angular. It’s a bit silly to say that moving from markup to declarative and programmatic UIs is hard and a negative. There is a learning curve but it’s not very steep and once you’ve learnt it you won’t want to go back to using a markup language.

    The flutter and dart team are fantastic and they are expanding both the language and framework into directions that appeal to native devs. They currently are working on refactoring the flutter view embedding system to make it possible to build headless flutter views and make it easier to integrate flutter with existing native mobile apps. Dart is being expanded to have provable non null default types, extension methods, data classes, and a ton of other great features. There really is no excuse anymore to ignore the flutter framework. It’s a direct competitor to native and a viable alternatives for most applications.

  4. Vishnu Nair

    This is a very misleading article and it’s evident that the author has not done much of a research about Flutter or it’s working before writing this article. Flutter is very much flexible and does not enforce Material design as others have already pointed out in the comments above. To imply that Flutter is only good for small apps is laughable as enterprise level apps have been built using Flutter which are almost impossible to distinguish from a native app from end-user’s perspective.