A New Hope

A New Hope

"A New Hope" a talk about Flutter by Eugenio Marletti & Stebastiano Poggi

Video DroidconIT 2017: https://youtu.be/0ijVuVtu6a4

In this day and age, the Android UI is getting more and more features. Which is amazing. But they get layered on top of years of TODOs, less-than-clean code, and quick patches. This means the APIs are not as terse as us devs would like, and there’s plenty of unwritten knowledge to have to make things work. What if there was something that took the best bits of the Android UI model and wrapped that in a modern, sensible codebase?

Turns out, there is. It’s part of a “native cross-platform” framework, Flutter, that is being developed in Google and used in some of their products. While still a long way from stable and feature-complete, Flutter has an interesting approach of including a full framework based off of Dart. It’s modeled on the good bits of the Android UI framework and will allow your code to run consistently across devices, without the weird BSP- or vendor-specific issues we unfortunately got used to.

Fde10bcf0813b2162545477be4e7470b?s=128

Eugenio Marletti

April 06, 2017
Tweet

Transcript

  1. 2.
  2. 8.
  3. 9.
  4. 10.
  5. 11.
  6. 13.

    Dynamic language Statically checked (strong mode) Mixins, reified generics, async

    (streams!) const constructs Snapshots (serialisation) Runs in Dart VM, JS or AOT native
  7. 20.
  8. 24.

    Stateful class _CounterState extends State<Counter> { int _counter = 0;

    void _increment() { setState(() { ++_counter; }); } @override Widget build(BuildContext context) { return new Text("Count: " + _counter); } }
  9. 26.
  10. 27.
  11. 30.

    Full control No OEM customisation Always up to date Inspect

    real source code which will be run Minimal Apk size: 8MB
  12. 32.

    $ flutter doctor [✓] Flutter (on Mac OS X 10.12.4

    16E195, channel unknown) • Flutter at /Users/takhion/flutter • Framework revision 031e042eee (3 weeks ago), 2017-03-17 15:24:54 • Engine revision c4edec7417 • Tools Dart version 1.23.0-dev.9.0 [✓] Host Executable Compatibility • Downloaded executables execute on host [✓] Android toolchain - develop for Android devices (Android SDK 25.0.2) • Android SDK at /Users/takhion/Android/sdk • Platform android-25, build-tools 25.0.2 • ANDROID_HOME = /Users/takhion/Android/sdk • Java binary at: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/java • Java version: Java(TM) SE Runtime Environment (build 1.8.0_25-b17) [✓] iOS toolchain - develop for iOS devices (Xcode 8.2.1) • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 8.2.1, Build version 8C1002 • ios-deploy 1.9.1 • CocoaPods version 1.2.0 [✓] Android Studio (version 2.2) • Android Studio at /Applications/Android Studio.app/Contents • Gradle version 2.14.1 [✓] Connected devices • Pixel • FA69N0309825 • android-arm • Android 7.1.1 (API 25)
  13. 34.

    $ flutter run Launching lib/main.dart on Pixel in debug mode...

    Running 'gradle assembleDebug'... Built build/app/outputs/apk/app-debug.apk (21.8MB). Uninstalling old version... Installing build/app/outputs/apk/app.apk... 6.0s Syncing files to device... 2.8s ! To hot reload your app on the fly, press "r". To restart the app entirely, press "R". The Observatory debugger and profiler is available at: http://127.0.0.1:8106/ For a more detailed help message, press "h". To quit, press "q".
  14. 35.
  15. 36.
  16. 37.
  17. 41.
  18. 42.