-
Notifications
You must be signed in to change notification settings - Fork 4
4. Evaluation
Rhydian Thomas edited this page Mar 1, 2019
·
21 revisions
Caveat; the following is pretty opinionated and limited to my (time-boxed) experience with building the flutter app in this repository, as at Sep 2018.
- your hitting x2 platforms not one (obviously)
- native UI performance with smooth animations
- hot-reload really does accelerate the development cycle, avoiding lengthy app restarts
- don't need to be an iOS/Android expert and can avoid a large number of platform specific concepts, e.g. Storyboards, View controllers, lifecycles (iOS) or Activities, Intents, Fragments (Android)
- composing apps from pre-built widgets results in rapid development
- the (Material design) widgets are feature-rich, implementing common UI patterns you can re-use (e.g. sticky/stretchy headers, hero animations)
- the layout model should be familiar to web developers and reactive paradigm to most
- Dart is easy enough to pickup, if your familiar with Swift/Kotlin or Java
- Documentation is good and there’s lots of free resources available to up-skill
- Google seem heavily invested in it (used internally/ battle tested)
Flutter renders its own UI, it doesn't use components provided by iOS/Android SDK's. A couple of limitations arise from this:
- missing UI components, the most notable being Maps and inline Web views
- we can use plugins to open native maps/ web views, but these are presented in a separate view controller (iOS)/ activity (Android), which may not align with your design requirements
- limited number of Cupertino widgets
- probably as expected, the Material design components are far more mature than their iOS counterparts
- this is an issue if you want to build an app that closely conforms to the iOS look and feel
- also, the current widget implementations aren’t pixel perfect replicas of those provided by the iOS SDK
- when the OS updates its UI, the flutter team (or open source community) need to play catchup
- e.g. when Safe areas were introduced in iOS
- we can’t use the vast array of open source Swift/Java UI components, within the flutter canvas
Sometimes you need to dig into platform specifics, you will need some level of understanding and experience with both iOS and Android development, for example;
- set a splash screen and app icon
- using iOS simulators and Android emulators (installing, launching, configuring, etc.)
- debug build issues
- deploy to app stores
- build your own plugins
Plugins are key gap-fillers for native features that flutter can’t offer out of the box;
- most plugins are written by 3rd parties, as with any open source dependency, the quality varies, risk is higher vs depending directly on Apple/Android SDK
- plugins often don’t expose the full native API
- depending on 3rd party to keep plugins up to date or fork them yourself
- initially I thought the learning curve would be pretty steep, as you need to learn a whole bunch of widgets (classes) and their attributes;
- I spent ~1 day getting familiar with the core concepts and Dart basics
- took about ~2 days before I felt comfortable putting together a functional app (understanding which widget to use takes a fair bit of trial and error)
- spent ~2 days building the POC in this repository
- Dart isn’t a particularly well known language, although coming from Swift, the learning curve wasn’t that bad and I would imagine the same for anyone coming from Java/Kotlin. The perception of using a proprietary language however may be off-putting to developers
- it’s all code, there’s no official visual tools to help you construct UI’s
- hot reload helps, but your testing against a specific device vs being able to switch between devices at design time, as you can with Storyboards (iOS)
- tooling can be a bit buggy, e.g.
- hot reloading doesn’t always work
- sometimes you need to stop, delete the app then re-run, to ensure clean state
-
flutter clean
is your friend
- iOS 8 and above
- Android 4.1 and above
- widgets are responsive to layout changes, but Tablets are not officially supported
- with clients open to using emerging (higher risk) technologies for potential savings
- where budget limitations mean building pure native is not a viable option
- for internal, non customer facing apps, proof of concepts and throwaways
- for customer facing apps, where the design requirements can be negotiated
- for teams with limmited mobile app experience
- when the design requirements dictate a pure iOS look and feel
- where maps are the primary app feature or there are embedded web view (hybrid) requirements
- for apps which require Tablet support
- for teams without any mobile app experience
- when your targeting a single platform