Beruflich Dokumente
Kultur Dokumente
DART
2
Dart es un lenguaje open source desarrollado
por Google, inicialmente fue creado como una
alternativa a javascript, sin embargo pese a la
intención de su creador por hacerlo estándar
para la web, los demás navegadores no lo
incorporaron a su core.
3
Dart es un lenguaje open source desarrollado
por Google, inicialmente fue creado como una
alternativa a javascript, sin embargo pese a la
intención de su creador por hacerlo estándar
para la web, los demás navegadores no lo
incorporaron a su core.
4
Dart es una alternativa moderna a Javascript la
cual fue presentada el 10 de octubre de 2011
en Aarhus Dinamarca, la cual en su momento
no pretendía ser un sustituto a Javascript,
puesto que este transpila al lenguaje estándar
en los navegadores. En la ya mencionada
presentación El ingeniero de Google Lars Bak,
describe a Dart “como lenguaje estructurado
pero flexible para la programación Web”
5
Dart admite clases, mixins, tipado estático, clases
abstractas, herencia e interfaces, en general un
código seguro y con mucha capacidad para el
desarrollo de grandes proyectos y recordemos que
Javascript introdujo clases en ECMAScript 2015,
desde antes se utilizaban pero por medio de
prototipos y aun hoy en día ya implementada dicha
característica, según el portal web caniuse este
presenta problemas de uso en cuanto al estándar
de los diferentes navegadores, claro esta que para
los mas utilizados no hay problema aunque se
recomienda implementarlo en su modo estricto. 6
¿Qué es Flutter y qué lo hace tan especial?
8
Razones de peso para usar Flutter
(Cont…):
Hot reload: Este hace muy interesante a Flutter
puesto que el desarrollo de aplicaciones, nos
permite ver cambios al instante en el emulador
(Dependiendo de la capacidad de tu
computadora), para ser mas especifico, si
vienes del desarrollo web o tiene conocimiento
en su funcionamiento es muy similar a la hora
de efectuar cambios y observarlos en el
navegador en conclusión mas eficiencia.
9
Razones de peso para usar Flutter
(Cont…):
Clases: Casi todo esta basado en la
orientación a objetos, entonces por un lado es
muy semejante a Java y por otro lado es muy
afín al desarrollo web con html5
10
Codificando una App Android Con Flutter y Dart .
11
Codificando una App Android Con Flutter y Dart .
13
Creando Widgets
14
Stateless Widget
@override
Widget build(BuildContext context) {
// Logic here!
}
}
15
Stateless Widget
.
class MyStatelesWidgetExample
extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Logic here!
}
}
16
Stateless Widget
@override
Widget build(BuildContext context) {
return new Text("Hello Flutter");
}
}
17
El objeto Text a su vez es otro stateless
widget, en cuyo constructor le pasamos el
texto que quedará como atributo interno e
inmodificable.
RESULTADO:
18
El texto que contiene nuestro nuevo widget se pintaba
en las coordenadas (0,0) en pantalla, y quedaba
tapado por la status bar del dispositivo. He optado
por añadir otro widget más (Center) para centrar en
pantalla el texto.
void main() {
runApp(new MyStatelesWidgetExample());
}
@override
Widget build(BuildContext context) {
return new Center(
child: new Text("Hello Flutter")
);
} 19
Stateful Widget
20
Stateful Widget
@override
MyStatefulWidgetState createState() => new MyStatefulWidgetState();
@override
void initState() {
super.initState();
// Initialize dependencies here
}
@override
Widget build(BuildContext context) {
// Logic here
}
} 21
Al extender la clase de StatefulWidget es
necesario sobreescribir el
método createState, que recibe el State el cual
gestionará el widget. Para hacer un código más
limpio el State que recibe el widget lo podemos
poner en una clase aparte, y ésta sobreescribe el
método build (funciona igual que en el stateless
widget).
22
Además (aunque no es necesario) es posible
sobreescribir el método initState, método que
es llamado al iniciarse el State del widget, lo
podemos aprovechar para inicializar las
dependencias que tengamos.
Una imagen vale más que mil palabras, así
que adjunto una imagen con el ciclo de vida de
un State:
23
24
Material Design Widgets
Una de las cosas destacadas de Flutter es que
trae ya implementados una colección de
widgets con los que poder crear vistas
basadas en las guías de estilo Material Design
que, sinceramente, son realmente útiles.
Podemos hacer una app realmente atractiva
sólo llamando a esta colección de widgets.
Para poder llamar a los widgets material
design es necesario importálos:
import 'package:flutter/material.dart';
25
Scaffold
‘Implements the basic material design visual
layout structure.’
Es el más básico para dibujar interfaces, sería
como nuestro lienzo en blanco. Podemos
empezar a dibujar en él pasándole un widget a
su parámetro body.
Además cuenta con varios parámetros más a los
que les podemos pasar
una appBar (Toolbar), backgroundColor,
una navigation drawer, o incluso
un floatingActionButton. 26
AppBar
‘A material design app bar.’
No tiene mucha ciencia, es una toolbar que se
ajusta al ancho de la pantalla por defecto y
podemos, al igual que con el widget anterior,
jugar con varios de sus parámetros para
conseguir un diseño a nuestro gusto.
27
FloatingActionButton
‘A material design floating action button.’
Es un botón circular que contiene un icono y
realiza una acción considerada la principal en
esa pantalla, suele usarse para el botón de
‘crear’, ‘compartir’, ‘buscar’.
28
import 'package:flutter/material.dart';
void main() {
runApp(new MyStatefulWidgetExample());
}
@override
MyStatefulWidgetState createState() => new MyStatefulWidgetState();
var _counter = 0;
@override
void initState() {
super.initState();
// Initialice
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Center(child: new Text("Counter: $_counter")),
appBar: new AppBar(
title: new Text("My Flutter App Example <3")
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.add),
onPressed: () => setState(() {
_counter++;
})
)
);
}
29
30
Crear un app calculadora de propinas con los siguientes widgets:
@override
Widget build(BuildContext context) {
// More code goes here
}
32
Creemos ahora los dos 01// Create first input field
02TextField billAmountField = new TextField(
widgets TextField. Mientras lo 03 labelText: "Bill amount(\$)",
hacemos, podemos especificar 04 keyboardType: TextInputType.number,
detalles tales como las etiquetas que 05 onChanged: (InputValue value) {
queremos asociar con los widgets y 06 try {
los tipos de teclados virtuales que 07 billAmount = double.parse(value.text);
deben ser mostrados cuando están 08 } catch (exception) {
09 billAmount = 0.0;
enfocados. 10 }
11 }
Debido a que no podemos recolectar 12);
directamente los contenidos de un 13
widget TextField, debemos también 14// Create another input field
asociar un evento 15TextField tipPercentageField = new TextField(
16 labelText: "Tip %",
manejador onChanged con este. Dentro 17 keyboardType: TextInputType.number,
del manejador, que recibe un 18 hintText: "15",
objeto InputValue, podemos actualizar 19 onChanged: (InputValue value) {
los contenidos de nuestras variables 20 try {
de miembro de la clase. 21 tipPercentage = double.parse(value.text);
22 } catch (exception) {
23 tipPercentage = 0.0;
En consecuencia, agrega el siguiente 24 }
código dentro del método build(): 25 }
26);
33
puedes ver que estamos usando el método parse() para
convertir cada texto de contenido del widget TextField a un
objeto double. Debido a que el método parse() puede arrojar
un FormatException, también está rodeado por un bloque try...catch.
34
Dentro del evento manejador onPressed del botón, calcularemos
la propina y la cantidad total a ser pagada, y mostraremos
ambos en un diálogo modal. Para crear el diálogo, podemos
usar la clase AlertDialog. Una vez creada, el diálogo puede ser
mostrado pasándolo como un argumento al
método showDialog().
Los diseños conteniendo barras de app y contenedores son tan comunes que
Flutter ofrece un widget Scaffold para ayudarte a establecer rápidamente una relación
entre estos.
1Scaffold scaffold = new Scaffold(appBar: appBar,
2 body: container);
Con el widget Scaffold en su raíz, nuestro árbol de widgets está ahora listo. Puedes continuar y usar el
widget Scaffold como el valor de regreso del método build().
1return scaffold;
36
Nuestro archivo Dart necesita una función main() como su punto de entrada. Dentro de este, debemos llamar la
función runApp() para inflar realmente y generar el árbol de widgets que creamos en el paso anterior.
1void main() {
2 runApp(new MaterialApp(
3 title: 'Tip Calculator',
4 home: new TipCalculator()
5 ));
6}
38