Blog

 

 tl;dr: Flutter offers another cross-platform solution for mobile apps. It is only intended for the UI layer and makes use of native controls with a centralized API so you can write once and use actual native controls on both platforms as opposed to an HTML/CSS solution (more like React Native than PhoneGap).

The biggest risk with this solution is that it is still in beta and is very new. There will be many bugs to work out — and I'm not holding my breath that this one will be any different from its predecessors. Read on to see why.

 

Pros:

  • Simplified reload. Stateful Hot Reload allows for making code changes and reloading the app without having to go through the compilation process. Compiling usually takes around 10-20 seconds each time depending on app size and some other factors.

  • Uses native UI objects. This is in place of a webview with HTML/CSS. Using native UI objects allows views to be constructed with native views already familiar to the user. They’re also maintained by each platform, meaning less upkeep for your team.

  • Multiple IDE integrations. Flutter integrates with existing IDEs including Xcode, Android Studio, IntelliJ, and AppCode, allowing your developers to use tools they already know.

  • Created by Google. It will likely receive frequent and high-quality updates.

  • Geared for rapid development. These are claims at the moment, but other cross-platform solutions claim the same and it rarely pans out. The final optimizations and bug fixes on those solutions tend to take much longer than just building native.

Cons:

  • Lack of stability. It has only been publicly available for 2 weeks and is still in beta. This is a huge risk. Being the guinea pig means refactoring as the framework gets updated. Many bugs within the framework that require us to find hacky solutions or wait for them to be fixed at the framework level. My experience with React in the early state meant that there were a ton of "if iOS do A, else if Android do B" carve-outs.

  • Doesn’t stand out. This tool feels no different than other cross-platform tools (PhoneGap, Titanium, React Native, Mono). Many of these platforms, especially early on, are buggy, poorly documented, and not great for performance. This was especially bad with React when it was in beta, which is what Flutter seems to be emulating more than the HTML/CSS based solutions.

  • Repeated UI. Cross-platform tools frequently result in identical UI between the platforms. This usually isn't ideal as the apps end up not feeling like an iOS app or an Android app, they feel completely separate. This is becoming less of an issue as apps are becoming more custom overall, but it is still a consideration.

  • Uses Dart. There are more developers out there who know Java, Swift, or Objective-C than Dart. This will be an issue down the road when it comes time for long-term maintenance.

  • Created by Google. Yes, this is a pro and a con. This means the project may be abandoned with little warning if adoption isn't to their liking or if they decide that they have a new road they want to pursue. See Google Wave, Google Glass, Google Buzz, Google Code, etc.

  • Another dependency to manage. This may or may not be compatible with other dependencies in the wild. This also means there is another layer that needs to be maintained when OS versions are released or when new devices come out (some of the releases are targeted directly at the iPhone X. Without the Flutter middle layer, the iOS code could be updated immediately without having to wait for the Flutter team to add support. 

Excited about Flutter? Not so much? Leave us a comment below or send us your thoughts at helloworld@303software.com.  

Update: After chatting with the Group Product Manager at Flutter, we have a few corrections: 

1. As a correction to our statement that Flutter uses UI objects: Flutter actually includes controls with both iOS and Android styles, Flutter paints every pixel on the screen, using the underlying Skia graphics engine, allowing designers and devs to have complete control and enabling the apps to be fully brand-themed.

2. We said that Flutter has only been available for a few weeks, when in fact the Beta came out a few weeks ago. The Alpha had been publicly available since last spring.