SlideShare una empresa de Scribd logo
La Magia de Flutter
Mauricio Angulo S.
UX Strategist & Sprintmaster
mauricio@tesseractspace.com
@mauricioangulo | @tesseractspace
Basado en la presentación de
Tim Messerschmidt - Regional Lead, Developer Relations
messerschmidt@google.com | @SeraAndroid
Trabajo en Tesseract Space, una empresa mexicana como consultor en
experiencia de usuario y sprintmaster certificado.
Soy miembro del grupo de Google Experts y de la iniciativa de
Microsoft Regional Director como mentor en usabilidad, diseño y desarrollo
de software.
En 2014 fundé UX Nights, una comunidad sobre experiencia de usuario. Soy
escritor, ponente internacional, maestro de UX en la Universitat Pompeu
Fabra en Barcelona, sensei de UX en Dev.f y formador técnico en
LinkedIn Education.
> www.about.me/mauricioangulo
> https://developers.google.com/experts/people/mauricio-angulo
> @mauricioangulo
Mauricio Angulo S.
¿Qué es Flutter?
Un SDK que sirve para crear fácilmente app móviles modernas, bonitas y de alto
desempeño
Funciona para Android y iOS
Es una herramienta open-source, desarrollada por Google*
Tiene más de 100 colaboraciones de la comunidad open source
* Actualmente se encuentra en Beta
¿Para quién es Flutter?
Diseñadores que desean una experiencia de marca convergente tanto en
Android como en iOS
Prototipadores que buscan alta fidelidad y una forma rápida de construir
prototipos interactivos.
Programadores que pueden beneficiarse de las herramientas de desarrollo,
un lenguaje sencillo y una rica librería de widgets. Flutter ayuda a ahorrar
tiempo de desarrollo para crear experiencias memorables.
1.Experiencia de Desarrollo
2.Desempeño
Design-oriented
Development Flow
¿Qué es lo que ves aquí?
Diagrama de composición
- Observa las filas y columnas
- ¿Hay alguna rejillas?
- ¿Hay elementos que se traslapen?
- ¿Necesitamos pestañas?
- ¿Se necesita más espacio en los bordes, o
mejorar la alineación?
Diseño de abajo hacia arriba
Analogía de HTML/CSS con Flutter
var container = new Container( // grey box
child: new Text(
"Lorem ipsum",
style: new TextStyle(
fontSize: 24.0
fontWeight: FontWeight.w900,
fontFamily: "Georgia",
),
),
width: 320.0,
height: 240.0,
color: Colors.grey[300],
);
<div class="greybox">
Lorem ipsum
</div>
.greybox {
background-color: #e0e0e0; /* grey 300 */
width: 320px;
height: 240px;
font: 900 24px Georgia;
}
Herramientas eficientes
$ flutter doctor
Revisa el entorno y muestra un reporte en la ventana de la terminal
$ flutter upgrade
Actualiza tanto el SDK de Flutter así como los otros paquetes
pubspec.yaml
name: flutter_project
description: An amazing Flutter project using Firebase Auth
dependencies:
flutter:
sdk: flutter
firebase_auth: "^0.2.5"
pubspec.yaml
name: flutter_project
description: An amazing Flutter project using Firebase Auth
dependencies:
flutter:
sdk: flutter
firebase_auth: ">=0.1.2 <0.2.6"
$ flutter packages get
Revisa el entorno y muestra un reporte en la ventana de la terminal
$ flutter packages upgrade
Buscará la versión más reciente disponible del paquete
$ flutter format
Automáticamente formatea tu código de acuerdo al estilo de Flutter
$ flutter analyze
Analiza tu código y te ayuda a encontrar errores
Hot Reload
Inserta código actualizado dentro de la máquina virtual de Dart que se está
ejecutando
Stateful: El estado de la app se mantiene después de la actualización.
Sirve para iterar con rapidez en una pantalla que se encuentra en un nivel de
navegación profundo dentro de tu app
Es una herramienta de depuración y perfilamiento paso a paso
Corre automáticamente cuando se inicia una app usando flutter run
Sirve para:
- Ver cuáles líneas de código se han ejecutado
- Revisar asignaciones de memoria
- Depurar fugas de memoria y fragmentación
Dart Observatory
El Poder de los Widgets
Widgets que se ven bien y funcionan bien
Todo es un Widget
Adiós, sistema de posicionamiento global
new Center(
child: new Text('Texto Centrado', style: textStyle),
)
Estilos locales: Cada widget define su propio estilo. No hay necesidad de decirle al
widget padre que sus hijos se supone que deben ir centrados.
StatefulWidget
vs.
StatelessWidget
Personalizando y extendiendo Widgets
El sistema de Widget de Flutter fue diseñado para ser fácilmente personalizable.
Composición: Los widgets se construyen sobre widgets más pequeños que se
pueden reutilizar y combinar para hacer widgets personalizados.
class RaisedButton extends StatelessWidget {
...
}
Cada capa
se construye
sobre la
anterior
Skia Dart Texto
Bases
Animación Pintado
Renderizado
Widgets
Material
Gestos
Engine
(C++)
Framework
(Dart)
Cupertino
Canales de la Plataforma
Al utilizar canales de
plataforma podemos
recibir y enviar
resultados.
Ejemplo: Obtener el estado de la batería*
* Ejemplo escrito en Kotlin para 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
}
}
}
Trabajando con el argumento de la respuesta*
MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "getBatteryLevel") {
val batteryLevel = getBatteryLevel()
if (batteryLevel != -1) {
result.success(batteryLevel)
} else {
result.error("UNAVAILABLE", "El nivel de la batería no está disponible.", null)
}
} else {
result.notImplemented()
}
}
* Ejemplo escrito en Kotlin para Android
Invocación desde Flutter de los métodos de
plataforma
String _batteryLevel = 'Nivel de la batería desconocido.';
Future<Null> _getBatteryLevel() async {
String batteryLevel;
try {
final int result = await platform.invokeMethod('getBatteryLevel');
batteryLevel = 'Nivel de la batería al $result % .';
} on PlatformException catch (e) {
batteryLevel = "No fue posible obtener el nivel de la batería: '${e.message}'.";
}
setState(() {
_batteryLevel = batteryLevel;
});
}
Optimizado para Desempeño
- Compila a código nativo
- No depende de widgets de
terceros
- No se necesitan puentes
- Repintado estructural
Frameworks Reactive en la Web
Comparar
Actualizar
DOM Real
DOM
Virtual
Aplicación Plataforma
R
e
n
d
e
r
Canvas
Eventos
Frameworks Reactive en Móviles
Comparar
Actualizar
Widgets de
la
plataforma
Widgets
Virtuales
Aplicación Plataforma
R
e
n
d
e
r
Canvas
Eventos
Usando Flutter
Aŕbol de
Widgets
R
e
n
d
e
r
Canvas
Eventos
Aplicación Plataforma
Basado en Dart
- Sistema de tipado sencillo
- Tree Shaking
- Bibliotecas base
enriquecidas
- Multi-gen, lockless GC
- Una sola base de código
para Android y iOS
- Ciclos de desarrollo rápidos
- Buenas herramientas
“Al correr a 60 fps, las interfases de usuario
creadas con Flutter tienen un mejor desempeño
que las que fueron creadas en otros frameworks
de desarrollo multiplataforma.”
code.tutsplus.com/tutorials/developing-an-android-app-with-flutter--cms-28270
“Programar con Dart y Flutter me ayudó a
disfrutar de nuevo lo que hacía cuando
comencé a desarrollar para móviles hace
unos años..., sin $%&@”
traversoft.com/blog/2017/08/08/conference-app-flutter
"La UI es fluida y elegante (al compilar una versión
de producción), nunca había visto una app para
Android tan fluida"
Pascal Welsch, ponente en Droidcon Berlin
Recursos adicionales
Blog: What’s Revolutionary about Flutter por Wm Leler: goo.gl/bZcFR9
Video: Flutter's Rendering Pipeline por Adam Barth: youtu.be/UUfXWzp0-DU
Video: The Mahogany Staircase por Ian Hickson: youtu.be/dkyY9WCGMi0
y por supuesto: github.com/flutter & flutter.io
¡Gracias!
Mauricio Angulo S.
UX Strategist & Sprintmaster
mauricio@tesseractspace.com
@mauricioangulo | @tesseractspace
Basado en la presentación de
Tim Messerschmidt - Regional Lead, Developer Relations
messerschmidt@google.com | @SeraAndroid

Más contenido relacionado

La actualidad más candente

1. flutter introduccion v2
1.  flutter introduccion v21.  flutter introduccion v2
1. flutter introduccion v2
Felipe Hernandez Palafox
 
Css pseudo-classes
Css pseudo-classesCss pseudo-classes
Css pseudo-classes
Webtech Learning
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
BEEVA_es
 
Dart ppt
Dart pptDart ppt
Dart ppt
Krishna Teja
 
Introduction to Flutter - truly crossplatform, amazingly fast
Introduction to Flutter - truly crossplatform, amazingly fastIntroduction to Flutter - truly crossplatform, amazingly fast
Introduction to Flutter - truly crossplatform, amazingly fast
Bartosz Kosarzycki
 
4.3 arquitectura de un cms
4.3 arquitectura de un cms4.3 arquitectura de un cms
4.3 arquitectura de un cms
Eduardo Diiaz
 
Google flutter and why does it matter
Google flutter and why does it matterGoogle flutter and why does it matter
Google flutter and why does it matter
Ahmed Abu Eldahab
 
Introduccion a Nodejs
Introduccion a NodejsIntroduccion a Nodejs
Introduccion a Nodejs
Jan Sanchez
 
9. ES6 | Let And Const | TypeScript | JavaScript
9. ES6 | Let And Const | TypeScript | JavaScript9. ES6 | Let And Const | TypeScript | JavaScript
9. ES6 | Let And Const | TypeScript | JavaScript
pcnmtutorials
 
Métodos constructores, método toString()
Métodos constructores, método toString()Métodos constructores, método toString()
Métodos constructores, método toString()
Pablo Macon
 
RESTful API In Node Js using Express
RESTful API In Node Js using Express RESTful API In Node Js using Express
RESTful API In Node Js using Express
Jeetendra singh
 
Flutter state management from zero to hero
Flutter state management from zero to heroFlutter state management from zero to hero
Flutter state management from zero to hero
Ahmed Abu Eldahab
 
Flutter & Firebase BootCamp.pdf
Flutter & Firebase BootCamp.pdfFlutter & Firebase BootCamp.pdf
Flutter & Firebase BootCamp.pdf
ShivamShrey1
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
Shlomi Komemi
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
Gabriel Schade Cardoso
 
jQuery Essentials
jQuery EssentialsjQuery Essentials
jQuery Essentials
Bedis ElAchèche
 
JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object Model
WebStackAcademy
 
Bootstrap
BootstrapBootstrap
PHP Form Validation Technique
PHP Form Validation TechniquePHP Form Validation Technique
PHP Form Validation Technique
Morshedul Arefin
 
Javascript
JavascriptJavascript
Javascript
Sun Technlogies
 

La actualidad más candente (20)

1. flutter introduccion v2
1.  flutter introduccion v21.  flutter introduccion v2
1. flutter introduccion v2
 
Css pseudo-classes
Css pseudo-classesCss pseudo-classes
Css pseudo-classes
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Dart ppt
Dart pptDart ppt
Dart ppt
 
Introduction to Flutter - truly crossplatform, amazingly fast
Introduction to Flutter - truly crossplatform, amazingly fastIntroduction to Flutter - truly crossplatform, amazingly fast
Introduction to Flutter - truly crossplatform, amazingly fast
 
4.3 arquitectura de un cms
4.3 arquitectura de un cms4.3 arquitectura de un cms
4.3 arquitectura de un cms
 
Google flutter and why does it matter
Google flutter and why does it matterGoogle flutter and why does it matter
Google flutter and why does it matter
 
Introduccion a Nodejs
Introduccion a NodejsIntroduccion a Nodejs
Introduccion a Nodejs
 
9. ES6 | Let And Const | TypeScript | JavaScript
9. ES6 | Let And Const | TypeScript | JavaScript9. ES6 | Let And Const | TypeScript | JavaScript
9. ES6 | Let And Const | TypeScript | JavaScript
 
Métodos constructores, método toString()
Métodos constructores, método toString()Métodos constructores, método toString()
Métodos constructores, método toString()
 
RESTful API In Node Js using Express
RESTful API In Node Js using Express RESTful API In Node Js using Express
RESTful API In Node Js using Express
 
Flutter state management from zero to hero
Flutter state management from zero to heroFlutter state management from zero to hero
Flutter state management from zero to hero
 
Flutter & Firebase BootCamp.pdf
Flutter & Firebase BootCamp.pdfFlutter & Firebase BootCamp.pdf
Flutter & Firebase BootCamp.pdf
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
 
jQuery Essentials
jQuery EssentialsjQuery Essentials
jQuery Essentials
 
JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object Model
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
PHP Form Validation Technique
PHP Form Validation TechniquePHP Form Validation Technique
PHP Form Validation Technique
 
Javascript
JavascriptJavascript
Javascript
 

Similar a La magia de Flutter

Building Ria Applications With Silverlight 2
Building Ria Applications With Silverlight 2Building Ria Applications With Silverlight 2
Building Ria Applications With Silverlight 2
Tonymx
 
Arquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la ExperienciaArquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la Experiencia
Javier Vélez Reyes
 
Cv dennys-jose-marquez-reyes-desarrollador-web
Cv dennys-jose-marquez-reyes-desarrollador-webCv dennys-jose-marquez-reyes-desarrollador-web
Cv dennys-jose-marquez-reyes-desarrollador-web
Dennys José Márquez Reyes
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
Javier Suárez Ruiz
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
PHP Vigo
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
Microsoft Argentina y Uruguay [Official Space]
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
Alberto Diaz Martin
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
Alberto Diaz Martin
 
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
Microsoft Argentina y Uruguay [Official Space]
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
Luis Fernando Aguas Bucheli
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Commit 2018 - Integrando Microservicios y Machine Learning
Commit 2018 - Integrando Microservicios y Machine LearningCommit 2018 - Integrando Microservicios y Machine Learning
Commit 2018 - Integrando Microservicios y Machine Learning
Rafa Hidalgo
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
Luis Fernando Aguas Bucheli
 
Webinar interlat apps_2012_carlos_a-perez_españa
Webinar interlat apps_2012_carlos_a-perez_españaWebinar interlat apps_2012_carlos_a-perez_españa
Webinar interlat apps_2012_carlos_a-perez_españa
Jerilee Dueñas Rengifo
 
APPS Aplicaciones móviles: Construyendo y publicando nuestro primera APPS mul...
APPS Aplicaciones móviles: Construyendo y publicando nuestro primera APPS mul...APPS Aplicaciones móviles: Construyendo y publicando nuestro primera APPS mul...
APPS Aplicaciones móviles: Construyendo y publicando nuestro primera APPS mul...
Interlat
 
Webinar interlat apps_2012_carlos_a-perez_españa
Webinar interlat apps_2012_carlos_a-perez_españaWebinar interlat apps_2012_carlos_a-perez_españa
Webinar interlat apps_2012_carlos_a-perez_españa
Community Managers Latam
 
Metadata api en apex
Metadata api en apexMetadata api en apex
Metadata api en apex
Federico Giust
 
DESARROLLO DE SOFTWARE
DESARROLLO DE SOFTWAREDESARROLLO DE SOFTWARE
DESARROLLO DE SOFTWAREroccos1l
 
Creando Aplicaciones Web en el 2015
 Creando Aplicaciones Web en el 2015 Creando Aplicaciones Web en el 2015
Creando Aplicaciones Web en el 2015
Globant
 

Similar a La magia de Flutter (20)

Building Ria Applications With Silverlight 2
Building Ria Applications With Silverlight 2Building Ria Applications With Silverlight 2
Building Ria Applications With Silverlight 2
 
Arquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la ExperienciaArquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la Experiencia
 
Cv dennys-jose-marquez-reyes-desarrollador-web
Cv dennys-jose-marquez-reyes-desarrollador-webCv dennys-jose-marquez-reyes-desarrollador-web
Cv dennys-jose-marquez-reyes-desarrollador-web
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Commit 2018 - Integrando Microservicios y Machine Learning
Commit 2018 - Integrando Microservicios y Machine LearningCommit 2018 - Integrando Microservicios y Machine Learning
Commit 2018 - Integrando Microservicios y Machine Learning
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 
Webinar interlat apps_2012_carlos_a-perez_españa
Webinar interlat apps_2012_carlos_a-perez_españaWebinar interlat apps_2012_carlos_a-perez_españa
Webinar interlat apps_2012_carlos_a-perez_españa
 
APPS Aplicaciones móviles: Construyendo y publicando nuestro primera APPS mul...
APPS Aplicaciones móviles: Construyendo y publicando nuestro primera APPS mul...APPS Aplicaciones móviles: Construyendo y publicando nuestro primera APPS mul...
APPS Aplicaciones móviles: Construyendo y publicando nuestro primera APPS mul...
 
Webinar interlat apps_2012_carlos_a-perez_españa
Webinar interlat apps_2012_carlos_a-perez_españaWebinar interlat apps_2012_carlos_a-perez_españa
Webinar interlat apps_2012_carlos_a-perez_españa
 
Metadata api en apex
Metadata api en apexMetadata api en apex
Metadata api en apex
 
DESARROLLO DE SOFTWARE
DESARROLLO DE SOFTWAREDESARROLLO DE SOFTWARE
DESARROLLO DE SOFTWARE
 
Creando Aplicaciones Web en el 2015
 Creando Aplicaciones Web en el 2015 Creando Aplicaciones Web en el 2015
Creando Aplicaciones Web en el 2015
 

Más de Mauricio Angulo Sillas

Un tour por AMP
Un tour por AMPUn tour por AMP
Un tour por AMP
Mauricio Angulo Sillas
 
Diseño de Sistemas de Diseño con Atomic Design y Pattern Lab
Diseño de Sistemas de Diseño con Atomic Design y Pattern LabDiseño de Sistemas de Diseño con Atomic Design y Pattern Lab
Diseño de Sistemas de Diseño con Atomic Design y Pattern Lab
Mauricio Angulo Sillas
 
Microsoft Fluent Design System
Microsoft Fluent Design SystemMicrosoft Fluent Design System
Microsoft Fluent Design System
Mauricio Angulo Sillas
 
Lenguajes de Diseño Visual
Lenguajes de Diseño VisualLenguajes de Diseño Visual
Lenguajes de Diseño Visual
Mauricio Angulo Sillas
 
Cómo identificar clientes para tu negocio
Cómo identificar clientes para tu negocioCómo identificar clientes para tu negocio
Cómo identificar clientes para tu negocio
Mauricio Angulo Sillas
 
Design thinking todos somos diseñadores
Design thinking   todos somos diseñadoresDesign thinking   todos somos diseñadores
Design thinking todos somos diseñadores
Mauricio Angulo Sillas
 
Atomic Design con Pattern Lab
Atomic Design con Pattern LabAtomic Design con Pattern Lab
Atomic Design con Pattern Lab
Mauricio Angulo Sillas
 
Dear sandwich thief
Dear sandwich thiefDear sandwich thief
Dear sandwich thief
Mauricio Angulo Sillas
 
Introducción a Design Thinking
Introducción a Design ThinkingIntroducción a Design Thinking
Introducción a Design Thinking
Mauricio Angulo Sillas
 
Prototipando con Indigo Studio
Prototipando con Indigo StudioPrototipando con Indigo Studio
Prototipando con Indigo Studio
Mauricio Angulo Sillas
 

Más de Mauricio Angulo Sillas (10)

Un tour por AMP
Un tour por AMPUn tour por AMP
Un tour por AMP
 
Diseño de Sistemas de Diseño con Atomic Design y Pattern Lab
Diseño de Sistemas de Diseño con Atomic Design y Pattern LabDiseño de Sistemas de Diseño con Atomic Design y Pattern Lab
Diseño de Sistemas de Diseño con Atomic Design y Pattern Lab
 
Microsoft Fluent Design System
Microsoft Fluent Design SystemMicrosoft Fluent Design System
Microsoft Fluent Design System
 
Lenguajes de Diseño Visual
Lenguajes de Diseño VisualLenguajes de Diseño Visual
Lenguajes de Diseño Visual
 
Cómo identificar clientes para tu negocio
Cómo identificar clientes para tu negocioCómo identificar clientes para tu negocio
Cómo identificar clientes para tu negocio
 
Design thinking todos somos diseñadores
Design thinking   todos somos diseñadoresDesign thinking   todos somos diseñadores
Design thinking todos somos diseñadores
 
Atomic Design con Pattern Lab
Atomic Design con Pattern LabAtomic Design con Pattern Lab
Atomic Design con Pattern Lab
 
Dear sandwich thief
Dear sandwich thiefDear sandwich thief
Dear sandwich thief
 
Introducción a Design Thinking
Introducción a Design ThinkingIntroducción a Design Thinking
Introducción a Design Thinking
 
Prototipando con Indigo Studio
Prototipando con Indigo StudioPrototipando con Indigo Studio
Prototipando con Indigo Studio
 

Último

La Arquitectura del Eclecticismo, por Karina
La Arquitectura del Eclecticismo, por KarinaLa Arquitectura del Eclecticismo, por Karina
La Arquitectura del Eclecticismo, por Karina
KarinaRodriguezG2
 
Introduccion-a-la-vida-de-Johannes-Kepler.pptx
Introduccion-a-la-vida-de-Johannes-Kepler.pptxIntroduccion-a-la-vida-de-Johannes-Kepler.pptx
Introduccion-a-la-vida-de-Johannes-Kepler.pptx
albujarluisl
 
Arquitectura Ecléctica e Historicista en Latinoamérica
Arquitectura Ecléctica e Historicista en LatinoaméricaArquitectura Ecléctica e Historicista en Latinoamérica
Arquitectura Ecléctica e Historicista en Latinoamérica
imariagsg
 
Patrimundi Recuperadora Bancaria en Cancun
Patrimundi Recuperadora Bancaria en CancunPatrimundi Recuperadora Bancaria en Cancun
Patrimundi Recuperadora Bancaria en Cancun
DianaArtemizaCP
 
Desarrollo de habilidades de pensamiento (1).pdf
Desarrollo de habilidades de pensamiento (1).pdfDesarrollo de habilidades de pensamiento (1).pdf
Desarrollo de habilidades de pensamiento (1).pdf
marianamadronero578
 
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdfEstilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
JosueJuanez1
 
Propuesta de diseño de marca para Fred, muebles de diseño
Propuesta de diseño de marca para Fred, muebles de diseñoPropuesta de diseño de marca para Fred, muebles de diseño
Propuesta de diseño de marca para Fred, muebles de diseño
Mariano Salgado
 
Porfolio livings creados por Carlotta Design
Porfolio livings creados por Carlotta DesignPorfolio livings creados por Carlotta Design
Porfolio livings creados por Carlotta Design
paulacoux1
 
Porfolio de diseños de Comedores de Carlotta Design
Porfolio  de diseños de Comedores de Carlotta DesignPorfolio  de diseños de Comedores de Carlotta Design
Porfolio de diseños de Comedores de Carlotta Design
paulacoux1
 
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
Sarai747172
 
informecbdlp-240603151721-44655eeh2.docx
informecbdlp-240603151721-44655eeh2.docxinformecbdlp-240603151721-44655eeh2.docx
informecbdlp-240603151721-44655eeh2.docx
IsabellaCortes7
 
MAPAS MIXTOS DE LA EVOLUCIÓN DEL COMPUTADOR Y EL DISEÑO GRÁFICO
MAPAS MIXTOS DE LA EVOLUCIÓN DEL COMPUTADOR Y EL DISEÑO GRÁFICOMAPAS MIXTOS DE LA EVOLUCIÓN DEL COMPUTADOR Y EL DISEÑO GRÁFICO
MAPAS MIXTOS DE LA EVOLUCIÓN DEL COMPUTADOR Y EL DISEÑO GRÁFICO
MarianellaMalaveCazo
 
mapa mental gestion del capital humano.pdf
mapa mental gestion del capital humano.pdfmapa mental gestion del capital humano.pdf
mapa mental gestion del capital humano.pdf
andreakathe12
 
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptxVERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
ingridavila20
 
etiqueta que se utiliza en un restaurante .pdf
etiqueta que se utiliza en  un restaurante  .pdfetiqueta que se utiliza en  un restaurante  .pdf
etiqueta que se utiliza en un restaurante .pdf
Vhope6
 
Infografía profesional cronología horizontal bloques de colores fondo negro.pdf
Infografía profesional cronología horizontal bloques de colores fondo negro.pdfInfografía profesional cronología horizontal bloques de colores fondo negro.pdf
Infografía profesional cronología horizontal bloques de colores fondo negro.pdf
salazar1611ale
 
Lectura. Reseña ilustrada, novela Albert Camus
Lectura.  Reseña ilustrada, novela Albert CamusLectura.  Reseña ilustrada, novela Albert Camus
Lectura. Reseña ilustrada, novela Albert Camus
RenataGrecia
 
Teoría del Color para diseñadores y pintores
Teoría del Color para diseñadores y pintoresTeoría del Color para diseñadores y pintores
Teoría del Color para diseñadores y pintores
EduardoGM8
 
Arquitecto Cerro Larraín - Cerro Barón - Valparaíso
Arquitecto Cerro Larraín - Cerro Barón  - ValparaísoArquitecto Cerro Larraín - Cerro Barón  - Valparaíso
Arquitecto Cerro Larraín - Cerro Barón - Valparaíso
ArquitecturaClculoCe
 
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
62946377
 

Último (20)

La Arquitectura del Eclecticismo, por Karina
La Arquitectura del Eclecticismo, por KarinaLa Arquitectura del Eclecticismo, por Karina
La Arquitectura del Eclecticismo, por Karina
 
Introduccion-a-la-vida-de-Johannes-Kepler.pptx
Introduccion-a-la-vida-de-Johannes-Kepler.pptxIntroduccion-a-la-vida-de-Johannes-Kepler.pptx
Introduccion-a-la-vida-de-Johannes-Kepler.pptx
 
Arquitectura Ecléctica e Historicista en Latinoamérica
Arquitectura Ecléctica e Historicista en LatinoaméricaArquitectura Ecléctica e Historicista en Latinoamérica
Arquitectura Ecléctica e Historicista en Latinoamérica
 
Patrimundi Recuperadora Bancaria en Cancun
Patrimundi Recuperadora Bancaria en CancunPatrimundi Recuperadora Bancaria en Cancun
Patrimundi Recuperadora Bancaria en Cancun
 
Desarrollo de habilidades de pensamiento (1).pdf
Desarrollo de habilidades de pensamiento (1).pdfDesarrollo de habilidades de pensamiento (1).pdf
Desarrollo de habilidades de pensamiento (1).pdf
 
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdfEstilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
 
Propuesta de diseño de marca para Fred, muebles de diseño
Propuesta de diseño de marca para Fred, muebles de diseñoPropuesta de diseño de marca para Fred, muebles de diseño
Propuesta de diseño de marca para Fred, muebles de diseño
 
Porfolio livings creados por Carlotta Design
Porfolio livings creados por Carlotta DesignPorfolio livings creados por Carlotta Design
Porfolio livings creados por Carlotta Design
 
Porfolio de diseños de Comedores de Carlotta Design
Porfolio  de diseños de Comedores de Carlotta DesignPorfolio  de diseños de Comedores de Carlotta Design
Porfolio de diseños de Comedores de Carlotta Design
 
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
 
informecbdlp-240603151721-44655eeh2.docx
informecbdlp-240603151721-44655eeh2.docxinformecbdlp-240603151721-44655eeh2.docx
informecbdlp-240603151721-44655eeh2.docx
 
MAPAS MIXTOS DE LA EVOLUCIÓN DEL COMPUTADOR Y EL DISEÑO GRÁFICO
MAPAS MIXTOS DE LA EVOLUCIÓN DEL COMPUTADOR Y EL DISEÑO GRÁFICOMAPAS MIXTOS DE LA EVOLUCIÓN DEL COMPUTADOR Y EL DISEÑO GRÁFICO
MAPAS MIXTOS DE LA EVOLUCIÓN DEL COMPUTADOR Y EL DISEÑO GRÁFICO
 
mapa mental gestion del capital humano.pdf
mapa mental gestion del capital humano.pdfmapa mental gestion del capital humano.pdf
mapa mental gestion del capital humano.pdf
 
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptxVERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
 
etiqueta que se utiliza en un restaurante .pdf
etiqueta que se utiliza en  un restaurante  .pdfetiqueta que se utiliza en  un restaurante  .pdf
etiqueta que se utiliza en un restaurante .pdf
 
Infografía profesional cronología horizontal bloques de colores fondo negro.pdf
Infografía profesional cronología horizontal bloques de colores fondo negro.pdfInfografía profesional cronología horizontal bloques de colores fondo negro.pdf
Infografía profesional cronología horizontal bloques de colores fondo negro.pdf
 
Lectura. Reseña ilustrada, novela Albert Camus
Lectura.  Reseña ilustrada, novela Albert CamusLectura.  Reseña ilustrada, novela Albert Camus
Lectura. Reseña ilustrada, novela Albert Camus
 
Teoría del Color para diseñadores y pintores
Teoría del Color para diseñadores y pintoresTeoría del Color para diseñadores y pintores
Teoría del Color para diseñadores y pintores
 
Arquitecto Cerro Larraín - Cerro Barón - Valparaíso
Arquitecto Cerro Larraín - Cerro Barón  - ValparaísoArquitecto Cerro Larraín - Cerro Barón  - Valparaíso
Arquitecto Cerro Larraín - Cerro Barón - Valparaíso
 
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
 

La magia de Flutter

  • 1. La Magia de Flutter Mauricio Angulo S. UX Strategist & Sprintmaster mauricio@tesseractspace.com @mauricioangulo | @tesseractspace Basado en la presentación de Tim Messerschmidt - Regional Lead, Developer Relations messerschmidt@google.com | @SeraAndroid
  • 2. Trabajo en Tesseract Space, una empresa mexicana como consultor en experiencia de usuario y sprintmaster certificado. Soy miembro del grupo de Google Experts y de la iniciativa de Microsoft Regional Director como mentor en usabilidad, diseño y desarrollo de software. En 2014 fundé UX Nights, una comunidad sobre experiencia de usuario. Soy escritor, ponente internacional, maestro de UX en la Universitat Pompeu Fabra en Barcelona, sensei de UX en Dev.f y formador técnico en LinkedIn Education. > www.about.me/mauricioangulo > https://developers.google.com/experts/people/mauricio-angulo > @mauricioangulo Mauricio Angulo S.
  • 3. ¿Qué es Flutter? Un SDK que sirve para crear fácilmente app móviles modernas, bonitas y de alto desempeño Funciona para Android y iOS Es una herramienta open-source, desarrollada por Google* Tiene más de 100 colaboraciones de la comunidad open source * Actualmente se encuentra en Beta
  • 4. ¿Para quién es Flutter? Diseñadores que desean una experiencia de marca convergente tanto en Android como en iOS Prototipadores que buscan alta fidelidad y una forma rápida de construir prototipos interactivos. Programadores que pueden beneficiarse de las herramientas de desarrollo, un lenguaje sencillo y una rica librería de widgets. Flutter ayuda a ahorrar tiempo de desarrollo para crear experiencias memorables.
  • 7. ¿Qué es lo que ves aquí?
  • 8. Diagrama de composición - Observa las filas y columnas - ¿Hay alguna rejillas? - ¿Hay elementos que se traslapen? - ¿Necesitamos pestañas? - ¿Se necesita más espacio en los bordes, o mejorar la alineación?
  • 9. Diseño de abajo hacia arriba
  • 10. Analogía de HTML/CSS con Flutter var container = new Container( // grey box child: new Text( "Lorem ipsum", style: new TextStyle( fontSize: 24.0 fontWeight: FontWeight.w900, fontFamily: "Georgia", ), ), width: 320.0, height: 240.0, color: Colors.grey[300], ); <div class="greybox"> Lorem ipsum </div> .greybox { background-color: #e0e0e0; /* grey 300 */ width: 320px; height: 240px; font: 900 24px Georgia; }
  • 12. $ flutter doctor Revisa el entorno y muestra un reporte en la ventana de la terminal $ flutter upgrade Actualiza tanto el SDK de Flutter así como los otros paquetes
  • 13. pubspec.yaml name: flutter_project description: An amazing Flutter project using Firebase Auth dependencies: flutter: sdk: flutter firebase_auth: "^0.2.5"
  • 14. pubspec.yaml name: flutter_project description: An amazing Flutter project using Firebase Auth dependencies: flutter: sdk: flutter firebase_auth: ">=0.1.2 <0.2.6"
  • 15. $ flutter packages get Revisa el entorno y muestra un reporte en la ventana de la terminal $ flutter packages upgrade Buscará la versión más reciente disponible del paquete
  • 16. $ flutter format Automáticamente formatea tu código de acuerdo al estilo de Flutter $ flutter analyze Analiza tu código y te ayuda a encontrar errores
  • 17. Hot Reload Inserta código actualizado dentro de la máquina virtual de Dart que se está ejecutando Stateful: El estado de la app se mantiene después de la actualización. Sirve para iterar con rapidez en una pantalla que se encuentra en un nivel de navegación profundo dentro de tu app
  • 18.
  • 19. Es una herramienta de depuración y perfilamiento paso a paso Corre automáticamente cuando se inicia una app usando flutter run Sirve para: - Ver cuáles líneas de código se han ejecutado - Revisar asignaciones de memoria - Depurar fugas de memoria y fragmentación Dart Observatory
  • 20. El Poder de los Widgets
  • 21. Widgets que se ven bien y funcionan bien
  • 22. Todo es un Widget
  • 23. Adiós, sistema de posicionamiento global new Center( child: new Text('Texto Centrado', style: textStyle), ) Estilos locales: Cada widget define su propio estilo. No hay necesidad de decirle al widget padre que sus hijos se supone que deben ir centrados.
  • 25. Personalizando y extendiendo Widgets El sistema de Widget de Flutter fue diseñado para ser fácilmente personalizable. Composición: Los widgets se construyen sobre widgets más pequeños que se pueden reutilizar y combinar para hacer widgets personalizados. class RaisedButton extends StatelessWidget { ... }
  • 26. Cada capa se construye sobre la anterior Skia Dart Texto Bases Animación Pintado Renderizado Widgets Material Gestos Engine (C++) Framework (Dart) Cupertino
  • 27. Canales de la Plataforma
  • 28. Al utilizar canales de plataforma podemos recibir y enviar resultados.
  • 29. Ejemplo: Obtener el estado de la batería* * Ejemplo escrito en Kotlin para 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 } } }
  • 30. Trabajando con el argumento de la respuesta* MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result -> if (call.method == "getBatteryLevel") { val batteryLevel = getBatteryLevel() if (batteryLevel != -1) { result.success(batteryLevel) } else { result.error("UNAVAILABLE", "El nivel de la batería no está disponible.", null) } } else { result.notImplemented() } } * Ejemplo escrito en Kotlin para Android
  • 31. Invocación desde Flutter de los métodos de plataforma String _batteryLevel = 'Nivel de la batería desconocido.'; Future<Null> _getBatteryLevel() async { String batteryLevel; try { final int result = await platform.invokeMethod('getBatteryLevel'); batteryLevel = 'Nivel de la batería al $result % .'; } on PlatformException catch (e) { batteryLevel = "No fue posible obtener el nivel de la batería: '${e.message}'."; } setState(() { _batteryLevel = batteryLevel; }); }
  • 33. - Compila a código nativo - No depende de widgets de terceros - No se necesitan puentes - Repintado estructural
  • 34. Frameworks Reactive en la Web Comparar Actualizar DOM Real DOM Virtual Aplicación Plataforma R e n d e r Canvas Eventos
  • 35. Frameworks Reactive en Móviles Comparar Actualizar Widgets de la plataforma Widgets Virtuales Aplicación Plataforma R e n d e r Canvas Eventos
  • 38. - Sistema de tipado sencillo - Tree Shaking - Bibliotecas base enriquecidas - Multi-gen, lockless GC
  • 39. - Una sola base de código para Android y iOS - Ciclos de desarrollo rápidos - Buenas herramientas
  • 40. “Al correr a 60 fps, las interfases de usuario creadas con Flutter tienen un mejor desempeño que las que fueron creadas en otros frameworks de desarrollo multiplataforma.” code.tutsplus.com/tutorials/developing-an-android-app-with-flutter--cms-28270
  • 41. “Programar con Dart y Flutter me ayudó a disfrutar de nuevo lo que hacía cuando comencé a desarrollar para móviles hace unos años..., sin $%&@” traversoft.com/blog/2017/08/08/conference-app-flutter
  • 42. "La UI es fluida y elegante (al compilar una versión de producción), nunca había visto una app para Android tan fluida" Pascal Welsch, ponente en Droidcon Berlin
  • 43. Recursos adicionales Blog: What’s Revolutionary about Flutter por Wm Leler: goo.gl/bZcFR9 Video: Flutter's Rendering Pipeline por Adam Barth: youtu.be/UUfXWzp0-DU Video: The Mahogany Staircase por Ian Hickson: youtu.be/dkyY9WCGMi0 y por supuesto: github.com/flutter & flutter.io
  • 44. ¡Gracias! Mauricio Angulo S. UX Strategist & Sprintmaster mauricio@tesseractspace.com @mauricioangulo | @tesseractspace Basado en la presentación de Tim Messerschmidt - Regional Lead, Developer Relations messerschmidt@google.com | @SeraAndroid

Notas del editor

  1. Brand-driven == customized Internal teams at Google (CRM system) have managed to build functioning prototypes in a week. Designers with 0 coding experiences became productive with Flutter in weeks - allowing them to build prototypes in hours.
  2. Quieron concentrarme en dos partes de Flutter, que personalmente admiro
  3. Permite construir rápidamente UIs que se ven bien. Después veremos algunos widgets
  4. When talking to a designer and a developer, you will most definitely receive two different answers, leading to different understanding of the same UI and effectively leading to confusion. We can avoid that by bringing in designers and developers early on and cooperate on the same language and same UI toolkit.
  5. Try to place some of the implementation into functions to avoid deeply nested code
  6. There is a whole section in the Flutter docs that deals with this and helps people familiar with HTML and CSS to quickly become productive designers with Flutter
  7. If I wanted to limit the package to a specific range of versions, I could do that with the following syntax. Very similar to what Gradle offers you on Android.
  8. Formatter also exists for IntelliJ using the Dart plugin Analyzer also runs automatically in IntelliJ with the Flutter plugin
  9. The beauty of hot reload is, that even after fixing an error, state is still maintained - allowing to iterate and develop far quicker.
  10. Also available via IntelliJ’s built-in debugger
  11. The team analyzed popular apps and noticed a lot of custom widgets. So Flutter is designed to allow for that. Composition goes over inheritance
  12. This could be centering a text (by wrapping it in a center widget) or putting three column items into a row (widget).
  13. StatelessWidget is used for immutable elements that only rely on the object configuration information StatefulWidget is used for elements that can dynamically change based on state-changes in the system Everytime that state changes, setChange() is called by the object
  14. RaisedButton combines a Material widget with a GestureDetector widget
  15. Skia is the same graphics engine that Android uses. This one is built directly from source - compiled whenever you build Flutter The text engine is from Blink, the rendering engine from Chromium. Layout for text is terribly hard - think about right to left, displaying dates and more. Every layer of the Framework builds upon the layer below it. For instance, the Material and Cupertino layers compose basic widgets from the widgets layer, which itself orchestrates objects from the rendering layer. This also allows to customize the framework as you please. This part of the beauty of Dart’s tree shaking mechanism (eliminates dead code).
  16. If you’re coming from Android: this is very similar to serialization of data and then sending it across a channel - similar to an event bus or Intent
  17. Let’s focus on the blue bit for a second to understand how you’d do this on Android
  18. This works completely analog on iOS using Swift
  19. The call may fail – for example if the platform does not support the platform API (such as when running in a simulator), so we wrap the invokeMethod call in a try-catch statement.
  20. Flutter comes with it’s own widgets and renderer No support library needed. Not depended on OEM updates. Thanks to composition, we can only redraw what changed Bit blitting moved items that didn’t change from Cache
  21. The virtual DOM is immutable and needs to be rebuilt every frame - so 60 times per second when targeting 60fps
  22. The app being in control of the renderer gives it more potential for controlling animations
  23. Dart as a language is designed to be reliable. No surprises, no magic that can create confusion. Very familiar for people with background in Java, JS, C# and more
  24. Coming with Dart 2: sound type system (static and runtime type checks) Used to be optional in Dart 1 Dealing with Reactive Views requires dealing with a lot of small objects Here’s where Dart’s GC is super helpful Tree shaking != dead code elimination It only includes what you need instead of eliminating what you don’t need Originally written in JavaScript and C++. Tested out about 20 languages until the team ended up with Dart. Compiles to native so C++ isn't even needed anymore.