Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Flutter: o que é isso?

Flutter: o que é isso?

Apresentado na Trilha Mobile do TDC Florianópolis 2018

Avatar for Rafael Toledo

Rafael Toledo

April 19, 2018
Tweet

More Decks by Rafael Toledo

Other Decks in Programming

Transcript

  1. Wrapper WebView • Know-how das tecnologias web • Versões do

    JavaScript & features da WebView divergentes entre versões (fragmentação) • Limitação no uso de recursos não incluídos no SDK JavaScript • Performance • Lentidão na disponibilização de novas features para as plataformas 3
  2. Transpiler • Código-fonte para Código-fonte • Ganhos em performance •

    Frequentemente existe a necessidade de lidar diretamente com código nativo • Algumas abstrações não funcionam bem para todas as plataformas - write once, fix everywhere 5
  3. Flutter • Engine (C++) • Não utiliza o toolkit da

    plataforma - ele tem seu próprio toolkit! • Se conecta às camadas mais baixo nível de cada SO - gráficos, som, etc. • Binários otimizados para cada plataforma 7
  4. Dicas de leitura THE DIFFERENT APPROACHES TO CROSS-PLATFORM APPS https://bit.ly/2GZM4Vb

    WHAT’S REVOLUTIONARY ABOUT FLUTTER https://bit.ly/2gEFW8d 9
  5. Flutter: o que é? • Toolkit para a criação extremamente

    rápida de aplicativos multi-plataforma (iOS e Android)* • Open-Source, atualmente Beta • Foco na criação de interfaces belas e performáticas • Possibilidade de interoperabilidade com código pré-existente 10
  6. Flutter: Aplicações 11 DESENVOLVIMENTO Baixa curva de aprendizado, velocidade e

    um codebase único Mix up your images to match your content. Mix up your images to match your content. PROTOTIPAÇÃO Rápida iteração e customização de componentes DESIGN Unificação da linguagem utilizada - mesmo sem experiência prévia em desenvolvimento
  7. 13

  8. 15

  9. Dart • Familiar a linguagens conhecidas (C-like) • Amplamente utilizada

    em diversos produtos internamente no Google • Compila ARM e x86, transpila para JavaScript • Vasta Standard Library • Versão 2 lançada recentemente 16
  10. pubspec.yaml name: flutter_project description: A new Flutter project. dependencies: flutter:

    sdk: flutter cupertino_icons: ^0.1.2 flutter: uses-material-design: true 20
  11. 25

  12. 26

  13. 27

  14. 28

  15. Layouts Locais Todo widget define seu próprio layout: não existe

    um sistema global de layout new Center( child: new Text('Texto centralizado'), ); 29
  16. Layouts Locais Todo widget define seu próprio layout: não existe

    um sistema global de layout Center( child: Text('Texto centralizado'), ); // no Dart 2, 'new' é opcional 30
  17. Tudo é um widget class MyWidget extends StatelessWidget { @override

    Widget build(BuildContext context) { ... } } 32
  18. Tudo é um widget class MyWidget extends StatefulWidget { @override

    State<MyWidget> createState() { ... } } 33
  19. Tudo é um widget class MyWidget extends StatefulWidget { @override

    State<MyWidget> createState() { ... } } 34
  20. Tudo é um widget class _MyWidgetState extends State<MyWidget> { var

    _counter = 0; ... void incrementCounter() { setState(() { _counter++; }); } } 35
  21. Tudo é um widget class MyWidget extends StatefulWidget { @override

    State<MyWidget> createState() { ... } } 36
  22. Tudo é um widget class MyWidget extends StatefulWidget { @override

    _MyWidgetState createState() => new _MyWidgetState(); } 38
  23. Navegação class MyApp extends StatelessWidget { var routes = ...

    @override Widget build(BuildContext context) { return new MaterialApp( title: 'Hello TDC!', ... home: HomeScreen(), routes: routes, ); } } 40
  24. Navegação class MyApp extends StatelessWidget { var routes = ...

    @override Widget build(BuildContext context) { return new MaterialApp( title: 'Hello TDC!', ... home: HomeScreen(), routes: routes, ); } } 41
  25. Navegação val routes = <String, WidgetBuilder> { '/home': (BuildContext context)

    => new HomeScreen(), '/details': (BuildContext context) => new DetailsScreen() }; Navigator.pushNamed(context, '/details'); Navigator.push( context, new MaterialPageRoute(builder: (context) => new DetailScreen()), ); Navigator.pop(context); 42
  26. Navegação val routes = <String, WidgetBuilder> { '/home': (BuildContext context)

    => new HomeScreen(), '/details': (BuildContext context) => new DetailsScreen() }; Navigator.pushNamed(context, '/details'); Navigator.push( context, new MaterialPageRoute(builder: (context) => new DetailScreen()), ); Navigator.pop(context); 43
  27. Navegação val routes = <String, WidgetBuilder> { '/home': (BuildContext context)

    => new HomeScreen(), '/details': (BuildContext context) => new DetailsScreen() }; Navigator.pushNamed(context, '/details'); Navigator.push( context, new MaterialPageRoute(builder: (context) => new DetailScreen()), ); Navigator.pop(context); 44
  28. Navegação val routes = <String, WidgetBuilder> { '/home': (BuildContext context)

    => new HomeScreen(), '/details': (BuildContext context) => new DetailsScreen() }; Navigator.pushNamed(context, '/details'); Navigator.push( context, new MaterialPageRoute(builder: (context) => new DetailScreen()), ); Navigator.pop(context); 45
  29. Platform Channels Camada de comunicação que permite que o Flutter

    acesse serviços na plataforma de execução (Android, iOS) 47
  30. Platform Channels (ex. Android) class MainActivity() : FlutterActivity() { private

    val CHANNEL = "samples.flutter.io/battery" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) GeneratedPluginRegistrant.registerWith(this) MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result -> // TODO } } } 48
  31. Platform Channels (Android) MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result -> if

    (call.method == "getBatteryLevel") { val batteryLevel = getBatteryLevel() if (batteryLevel != -1) { result.success(batteryLevel) } else { result.error("UNAVAILABLE", "Battery level not available.", null) } } else { result.notImplemented() } } 49
  32. Platform Channels (Flutter) String _batteryLevel = 'Unknown battery level.'; Future<Null>

    _getBatteryLevel() async { String batteryLevel; try { final int result = await platform.invokeMethod('getBatteryLevel'); batteryLevel = 'Battery level at $result % .'; } on PlatformException catch (e) { batteryLevel = "Failed to get battery level: '${e.message}'."; } setState(() { _batteryLevel = batteryLevel; }); } 50
  33. Links FLUTTER https://flutter.io FLUTTER FOR WEB DEVELOPERS https://flutter.io/web-analogs/ FLUTTER FOR

    ANDROID DEVELOPERS https://flutter.io/flutter-for-android/ FLUTTER FOR REACT NATIVE DEVELOPERS https://flutter.io/flutter-for-react-native/ 51
  34. Links - Vídeos WHAT IS FLUTTER? https://www.youtube.com/watch?v=h7HOt3Jb1Ts SINGLE CODEBASE, TWO

    APPS WITH FLUTTER AND FIREBASE https://www.youtube.com/watch?v=w2TcYP8qiRI IN RECORD TIME: HOW WE QUICKLY BUILT A SERVERLESS APP WITH FIREBASE AND FLUTTER https://www.youtube.com/watch?v=prlK_QL_qOA HOW DART AND FLUTTER WORK TOGETHER? https://www.youtube.com/watch?v=iVYpeEd3Jes 52