Flutter desde cero

5.0
(2 calificaciones)

En este curso aprenderás desde cero a crear apps complejas con flutter usando una arquitectura limpia, programación funcional, navigator 2.0 y testing

iOS
Android
Flutter
Publicado: 05 / 07 / 2020·Actualizado: 08 / 09 / 2024
Instructor:Darwin Morocho
Nivel
Principiante
87h
Duración
333
Estudiantes

¿Qué aprenderás en este curso?

La sintaxis del lenguaje Dart
Crear apps para iOS y Android con flutter
Manejo de los widgets más comunes en flutter
La importancia del BuildContext
Tips de diseño y experiencia de usuario en las aplicaciones móviles
Manejo y uso de streams
Guardar datos en las preferencias de la aplicación
Gestión de estados con Provider
Inyección de dependencias
Unit testing
Widget Testing
Flutter web

Requisitos para este curso

Conocimientos básicos de programación orientada a objetos

Detalles del curso

En este curso aprenderás la sintaxis del lenguaje Dart, crear aplicaciones móviles con flutter desde cero, manejar los widgets más comunes en flutter, aplicar UX en tus apps, Singletons, uso del patrón Repositorio definir una arquitectura escalable y amigable con unit testing, inyección de dependencias, gestionar el estado de tu app con Provider, uso de streams, flutter web.

Este es un curso para principiantes para aquellos que quieren explorar el potencial de flutter.


Contenido del curso

Información del curso00:00:31
Códigos fuente
00:31
Dart 312:15:10
macOS - instalación
05:12
Windows - instalación
04:00
Visual Studio Code - configuración
01:02
La función main
06:01
Comentarios
02:08
Datos primitivos
07:14
Variables usado var
02:24
Variables dinámicas
07:13
La clase Object
09:47
Interpolación
07:12
Variables inmutables
10:43
Constantes
05:47
Funciones
07:14
Null Safety
06:15
Conditional member access
07:14
Null assertion operator
03:39
Operators - parte 1
09:45
Operators - parte 2
07:22
Operators - parte 3
07:27
Operators - parte 4
07:06
Operators - parte 5
13:30
Formatear nuestro código
03:04
Arrow functions
02:22
Callbacks
10:40
Listas - parte 1
06:16
Listas - parte 2
05:15
Listas - parte 3
10:07
Listas - parte 4
02:20
Listas - parte 5
04:00
Map - parte 1
08:20
Map - parte 2
07:14
Map - parte 3
06:39
Map - parte 4
06:10
Map - parte 5
05:43
Map - parte 6
08:21
Map - parte 7
10:09
Map - parte 8
04:48
Spread operator
08:35
if - else
06:42
switch - parte 1
06:04
switch - parte 2
03:38
switch - parte 3
04:37
El bucle for
14:20
El bucle while
06:52
break y continue
09:33
enums - parte 1
07:04
enums - parte 2
09:43
Inicialización tardia
05:09
Asignar valores a variables con switch
07:18
Clases - parte 1
12:29
Clases - parte 2
07:40
Herencia
13:28
Clases abstractas
05:41
Casting - parte 1
09:49
Casting - parte 2
05:11
Clases con constructores constantes
06:16
El operador de igualdad en clases
13:09
Parámetros de nombre - parte 1
05:57
Parámetros de nombre - parte 2
08:05
Parámetros opcionales - parte 1
13:02
Parámetros opcionales - parte 2
07:39
Record Types - parte 1
08:52
Record Types - parte 2
13:00
Variables globales y propiedades estaticas
10:28
Imports relativos
08:23
Datos privados
10:45
Getters
03:28
Extensiones
08:15
Validaciones con afirmaciones
09:15
Datos Genéricos - parte 1
13:03
Datos Genéricos - parte 2
09:49
Datos Genéricos - parte 3
10:26
typedefs
07:18
Factory constructors
09:48
Constructores de nombre
09:24
La clase DateTime
13:17
Implementar una clase
07:24
Modificadores de clase
13:07
Clases selladas
16:49
Clases selladas con datos genéricos
14:56
mixins - parte 1
14:19
mixins - parte 2
09:51
mixins - parte 3
06:36
Futures - parte 1
14:34
Futures - parte 2
09:34
Futures - parte 3
09:07
Errores y excepciones - parte 1
12:08
Errores y excepciones - parte 2
12:18
Errores y excepciones - parte 3
04:53
Errores y excepciones - parte 4
05:32
Instalación00:36:08
Instalar flutter en windows
17:21
Instalar flutter en macOS
18:47
Primeros pasos con flutter00:41:46
Configuración de visual studio code y android studio
01:24
Crear un proyecto flutter mediante linea de comandos
10:29
Crear un proyecto flutter mediante visual studio code
02:43
Crear un proyecto flutter mediante android studio
03:36
Emuladores y simuladores
06:45
Código dart básico de una app flutter
16:46
Conceptos básicos de desarrollo nativo01:22:57
Introducción
01:16
El archivo build.gradle - Android
10:17
Cambiar el package name - Android
04:12
Generar un apk - parte 1
07:34
Generar un apk - parte 2
16:04
Cambiar el icono - Android
06:12
AndroidManifest.xml
19:13
Datos básicos sobre Xcode
18:06
Widgets mas usados en flutter10:03:36
Introducción
00:36
El widget Text - parte 1
12:20
El widget Text - parte 2
11:13
El widget Text - parte 3
06:07
El widget Container - parte 1
12:17
El widget Container - parte 2
07:49
El widget Container - parte 3
09:13
El widget Container - parte 4
08:26
El widget Container - parte 5
11:28
El widget Container - parte 6
10:51
El widget Column - parte 1
11:06
El widget Column - parte 2
09:41
El widget Column - parte 3
10:26
El widget Row
12:19
Errores de overflow
08:25
El widget Flexible - parte 1
12:05
El widget Flexible - parte 2
11:51
Datos adicionales Row y Column
06:39
El widget Stack - parte 1
11:55
El widget Stack - parte 2
11:17
El widget Scaffold - parte 1
13:31
El widget Scaffold - parte 2
13:39
El widget Scaffold - parte 3
10:56
El widget Scaffold - parte 4
11:00
El widget SafeArea
08:49
El widget SingleChildScrollView - parte 1
14:13
El widget SingleChildScrollView - parte 2
05:53
El widget ListView - parte 1
12:27
El widget ListView - parte 2
14:10
El widget ListView - parte 3
12:03
Fuentes personalizadas - parte 1
11:27
Fuentes personalizadas - parte 2
09:02
Iconos personalizados - parte 1
10:16
Iconos personalizados - parte 2
19:46
El widget CupertinoApp
07:46
Imágenes - parte 1
12:54
Imágenes - parte 2
06:21
Imágenes - parte 3
12:58
Facebook ui - parte 1
07:52
Facebook ui - parte 2
11:11
Facebook ui - parte 3
12:14
Facebook ui - parte 4
10:40
Facebook ui - parte 5
10:45
Facebook ui - parte 6
11:02
Facebook ui - parte 7
16:41
Device Preview
13:33
Facebook ui - parte 8
07:31
Facebook ui - parte 9
13:18
Facebook ui - parte 10
16:59
Facebook ui - parte 11
15:58
Facebook ui - parte 12
13:11
Facebook ui - parte 13
08:42
Facebook ui - parte 14
13:14
Facebook ui - parte 15
09:54
Facebook ui - parte 16
05:53
Facebook ui - parte 17
01:15
Stateful widgets01:09:56
Teoría de widgets
08:03
Nuestro primer StatefulWidget
09:08
Init state
09:41
Periodic Timer
11:28
Liberar recursos con dispose
08:57
didUpdateWidget
11:01
Caso practico para un StatefulWidget
11:35
Navegación y diálogos03:05:18
Navigator y el Contexto
14:31
pop y maybePop
05:32
Pasar datos
08:29
popUntil
13:59
Forma correcta de pasar datos
04:35
Navegando usando nombres de rutas
10:10
Pasar datos con nombres de rutas
06:31
pushReplacementNamed
13:14
pushNamedAndRemoveUntil
04:21
Retornar datos
13:39
Refactorizando nuestro menu page
10:05
Dialogos - parte 1
08:24
Dialogos - parte 2
08:42
Dialogos - parte 3
06:17
Dialogos - parte 4
09:51
Dialogos - parte 5
08:25
Dialogos - parte 6
06:57
Dialogos - parte 7
12:44
El widget WillPopScope - parte 1
05:55
El widget WillPopScope - parte 2
12:46
Inputs04:20:58
Introducción
01:31
Proyecto para esta sección
07:46
Renderizando una lista de países
12:30
El widget TextField
07:05
Esconder el teclado del dispositivo móvil
06:25
PrimarySwatch
13:11
InputDecoration
11:15
Modos de teclado
16:01
InputDecorationTheme
13:43
TextEditingController
12:38
Expresiones regulares
12:50
Input Formatters - parte 1
07:42
Input Formatters - parte 2
12:41
CheckBox - parte 1
08:47
CheckBox - parte 2
07:42
CheckBox - parte 3
07:26
Radio - parte 1
09:47
Radio - parte 2
10:42
El widget Switch
05:05
El widget Slider - parte 1
09:11
El widget Slider - parte 2
05:35
El widget Slider - parte 3
10:06
EL widget CalendarDatePicker - parte 1
13:38
EL widget CalendarDatePicker - parte 2
08:11
El widget CupertinoDatePicker
12:52
Date y Time pickers mediante dialogos
16:26
Local y global keys01:27:30
Tipos de Keys
03:15
Diferenciar widgets del mismo tipo
10:37
Tipos de local keys
08:27
Preservar el estado dentro de una lista
17:08
ReordableListView
11:02
Global Keys - parte 1
09:35
Global Keys - parte 2
12:18
Global Keys - parte 3
15:04
El contexto01:56:20
Introducción
05:38
findAncestorWidgetOfExactType
15:09
Extensiones - parte 1
09:07
Extensiones - parte 2
08:57
addPostFrameCallback - parte 1
11:43
addPostFrameCallback - parte 2
14:47
addPostFrameCallback - parte 3
08:26
GlobalKey - dimensiones de un widget
10:37
GlobalKey - posición de un widget
11:27
GlobalKey - conocer si un widget aun forma parte del árbol de widgets
20:25
Inherited widgets02:05:07
Planteamiento del problema - parte 1
10:30
Planteamiento del problema - parte 2
10:20
Inherited Widgets - parte 1
10:18
Inherited Widgets - parte 2
08:40
Inherited Widgets - parte 3
05:37
Inherited Widgets - parte 4
13:42
Inherited Widgets - parte 5
10:02
Custom state management - parte 1
15:21
Custom state management - parte 2
16:59
Custom state management - parte 3
12:48
Custom state management - parte 4
10:47
Formularios01:45:44
Proyecto para esta sección
06:59
Formulario basico
11:53
El widget Form - parte 1
09:54
El widget Form - parte 2
13:49
AutovalidateMode
05:06
Validaciones usando mixins
13:03
Campos personalizados - parte 1
07:02
Campos personalizados - parte 2
13:49
Campos personalizados - parte 3
12:38
Foco de atención
11:26
Novedades Dart 2.17.000:27:38
Super initializers
06:02
Enumerados con miembros
10:38
Asserts
10:57
Clean Architecture20:46:03
Introducción
01:41
¿Qué es Clean Architecture?
06:27
Estructura del proyecto
07:26
Vista inicial de nuestra app
07:39
Tips para Visual Studio Code
08:58
Repository Pattern - parte 1
11:48
Repository Pattern - parte 2
08:52
Repository Pattern - parte 3
08:58
Repository Pattern - parte 4
13:44
Comprobar el acceso a internet - parte 1
11:54
Comprobar el acceso a internet - parte 2
12:00
Instalación y configuración de flutter_secure_storage
10:46
Comprobando una sesión activa en el dispositivo
04:09
Programación funcional - parte 1
09:39
Programación funcional - parte 2
12:50
Programación funcional - parte 3
05:32
Modulo de inicio de sesión - parte 1
11:59
Modulo de inicio de sesión - parte 2
16:02
Modulo de inicio de sesión - parte 3
06:32
The Movie DB - api key
02:46
Authentication API - postman
09:58
Authentication API - parte 1
11:11
Authentication API - parte 2
13:15
Authentication API - parte 3
09:39
Authentication API - parte 4
13:53
Authentication API - parte 5
17:23
La clase Http - parte 1
11:22
La clase Http - parte 2
08:56
La clase Http - parte 3
12:32
La clase Http - parte 4
11:59
La clase Http - parte 5
11:34
La clase Http - parte 6
14:21
La clase Http - parte 7
13:44
El widget Provider
10:03
El widget MultiProvider
05:02
context.read
06:29
Provider y el árbol de widgets
12:14
Lazy initialization
05:53
ChangeNotifier - parte 1
08:08
ChangeNotifier - parte 2
10:31
ChangeNotifier - parte 3
06:55
ChangeNotifier - parte 4
08:20
Estados inmutables - parte 1
10:08
Estados inmutables - parte 2
11:48
Estados inmutables - parte 3
13:02
Delegando funcionalidades a nuestro SignInController
07:41
Postman - Get Account
09:17
Get Account API - parte 1
08:28
Get Account API - parte 2
12:01
Estados globales - parte 1
07:46
Estados globales - parte 2
11:12
Delegando funcionalidades a nuestro SessionController
08:16
Code generation - parte 1
04:33
Code generation - parte 2
10:33
Code generation - parte 3
07:51
vscode - command runner
02:15
Recuperar la foto de perfil del usuario
10:14
Code generation - parte 4
09:40
Freezed - parte 1
13:14
Freezed - parte 2
04:24
Freezed - parte 3
08:21
Freezed - parte 4
05:23
Union Types
07:16
Freezed - parte 5
08:25
Freezed - parte 6
03:51
Freezed - parte 7
12:28
Trending API - parte 1
12:25
Trending API - parte 2
09:30
Email no verificado
09:44
Trending API - parte 3
10:20
FutureBuilder - parte 1
10:55
FutureBuilder - parte 2
11:50
json serializable - readValue
05:00
FutureBuilder - parte 3
09:08
Trending UI - parte 1
13:10
Trending UI - parte 2
07:34
Trending UI - parte 3
06:54
Enums con json serializable
05:26
Performers - parte 1
09:09
Performers - parte 2
11:54
Performers - parte 3
08:48
Performers - parte 4
12:24
Performers - parte 5
12:12
Performers - parte 6
11:38
Widget para mostrar en caso de solicitudes fallidas
09:01
flutter_gen - parte 1
12:22
flutter_gen - parte 2
07:11
El Widget RefreshIndicator
09:09
Refrescar contenido de la vista home - parte 1
08:54
Refrescar contenido de la vista home - parte 2
12:23
Estados inmutables con programación funcional - parte 1
12:08
Estados inmutables con programación funcional - parte 2
10:26
Estados inmutables con programación funcional - parte 3
12:24
Estados inmutables con programación funcional - parte 4
09:42
API GET - movie details - parte 1
09:49
API GET - movie details - parte 2
07:25
API GET - movie details - parte 3
09:40
API GET - movie details - parte 4
12:39
Limitantes de navigator 1.0 en web - parte 1
16:50
Limitantes de navigator 1.0 en web - parte 2
12:57
UI - movie view - parte 1
10:48
UI - movie view - parte 2
12:23
UI - movie view - parte 3
08:02
UI - movie view - parte 4
12:37
UI - movie view - parte 5
09:39
Favoritos - parte 1
10:37
Favoritos - parte 2
14:11
Favoritos - parte 3
08:10
Favoritos - parte 4
12:40
El widget TabBarView - parte 1
08:31
El widget TabBarView - parte 2
11:17
El widget TabBarView - parte 3
14:41
Favoritos - parte 5
08:46
AutomaticKeepAliveClientMixin
09:16
Delegando funcionalidades a nuestro SignInController
03:27
Favoritos - parte 6
07:53
Favoritos - parte 7
11:41
Favoritos - parte 8
12:44
Favoritos - parte 9
07:09
Creando un progress dialog
07:27
Temas - parte 1
10:12
Temas - parte 2
09:28
Temas - parte 3
11:31
Temas - parte 4
12:13
Temas - parte 5
08:53
Shared Preferences - parte 1
11:40
Shared Preferences - parte 2
06:55
Internacionalización y localización02:00:00
Un poco de teoría
05:41
Proyecto para esta sección
03:13
intl - DateFormat
07:44
intl - NumberFormat
07:51
intl - NumberFormat currency
11:19
flutter_localizations
08:16
Traducciones - parte 1
08:31
Traducciones - parte 2
13:55
Cambiando el idioma de la app - parte 1
09:22
Cambiando el idioma de la app - parte 2
11:30
Slang - parte 1
07:57
Slang - parte 2
11:40
Slang - parte 3
04:10
Slang - parte 4
08:43
Streams01:17:57
Teoría
02:56
async* & yield
06:37
Stream periodic
07:27
StreamSubscription
06:28
StreamController - parte 1
08:51
StreamController - parte 2
07:30
StreamController - parte 3
06:09
Clean architecture y streams - parte 1
10:55
Clean architecture y streams - parte 2
08:16
El widget StreamBuilder - parte 1
10:14
El widget StreamBuilder - parte 2
02:27
Streams y soporte para multiples idiomas con clean architecture01:30:22
Verificación de acceso a internet con streams - parte 1
08:30
Verificación de acceso a internet con streams - parte 2
11:22
Verificación de acceso a internet con streams - parte 3
04:13
Bug connectivity_plus en iOS
04:10
Verificación de acceso a internet con streams - parte 4
10:03
Soporte para multiples idiomas - parte 1
10:21
Soporte para multiples idiomas - parte 2
09:15
Soporte para multiples idiomas - parte 3
06:06
Soporte para multiples idiomas - parte 4
10:31
Soporte para multiples idiomas - parte 5
07:49
Soporte para multiples idiomas - parte 6
07:57
Navigator 2.0 y deep linking03:07:36
Proyecto para la sección
02:53
El widget Navigator
10:49
La clase RouterDelegate - parte 1
09:53
La clase RouterDelegate - parte 2
10:35
La clase RouterDelegate - parte 3
12:24
La clase RouterDelegate - parte 4
08:16
go_router - parte 1
08:17
go_router - parte 2
05:16
go_router - parte 3
05:44
go_router - parte 4
09:27
go_router - parte 5
08:31
go_router - parte 6
08:47
SplashView
11:15
Navegación anidada - parte 1
08:28
Navegación anidada - parte 2
11:16
Navegación anidada - parte 3
07:38
Navegación anidada - parte 4
09:36
Navegación anidada - parte 5
06:29
Navegación anidada - parte 6
08:26
Navegación anidada - parte 7
10:32
Navegación anidada - parte 8
12:56
Deep Links00:42:20
Deploy flutter web en firebase
06:35
Deep linking - android
13:17
Deep linking iOS - parte 1
13:33
Deep linking iOS - parte 2
08:54
Unit & Widget testing04:21:47
Proyecto para sección
03:40
Herramienta LCOV
01:29
Tipos de tests
02:55
Nuestro primer test unitario
05:44
Identificando bugs
08:22
Code coverage
04:25
Multiples tests en un archivo
09:30
Identificando bugs - parte 2
10:25
Grupos
06:37
setUp & tearDown
07:01
La clase ServiceLocator
08:15
ServiceLocator - test put
05:41
ServiceLocator - test tag
10:09
La función pumpWidget
06:16
La función pump
09:36
findByKey
05:37
pumpAndSettle
10:05
findsOneWidget
05:40
targetPlatform
11:59
Test código web
08:40
LoginView - parte 1
09:17
LoginView - parte 2
10:24
LoginView - parte 3
11:06
MyApp amigable con widget testing
10:40
showLoader
09:31
Errores de overflow
07:11
Tests en widgets de tipo scroll
08:53
Scroll en una lista
08:40
Slidable - parte 1
05:44
Slidable - parte 2
11:12
Slidable - parte 3
06:17
DropDownButton
11:08
TabBarView
09:24
Testing & Clean architecture10:50:17
Proyecto para esta sección
04:21
Migración Provider a ServiceLocator - parte 1
12:05
Migración Provider a ServiceLocator - parte 2
08:32
Migración Provider a ServiceLocator - parte 3
14:35
Test AccountRepository - parte 1
11:49
Test AccountRepository - parte 2
09:05
mockito
13:24
Mocks reutilizables
09:35
Test AccountRepository - parte 3
11:22
Test AccountRepository - parte 4
10:40
Test AccountRepository - parte 5
10:52
Test AuthenticationRepository - parte 1
11:30
Test AuthenticationRepository - parte 2
05:11
Test AuthenticationRepository - parte 3
09:49
Test AuthenticationRepository - parte 4
10:10
Test AuthenticationRepository - parte 5
13:17
Test AuthenticationRepository - parte 6
07:26
Test ConnectivityRepository - parte 1
11:23
Test ConnectivityRepository - parte 2
13:04
Test streams - parte 1
07:18
Test streams - parte 2
06:08
Test streams - parte 3
07:14
Test ConnectivityRepository - parte 3
11:44
Test ConnectivityRepository - parte 4
07:57
incrementando el porcentaje de code coverage
12:02
Test PreferencesRepository - parte 1
08:22
Test PreferencesRepository - parte 2
12:40
MyApp amigable con testing
07:10
Test SplashView - parte 1
09:50
Test SplashView - parte 2
09:22
Test SplashView - parte 3
08:14
Test SplashView - parte 4
07:30
Test OfflineView
11:08
Test SignInController - parte 1
07:55
Test StateNotifier
10:51
Test SignInController - parte 2
13:07
Test SignInView - parte 1
09:42
Test SignInView - parte 2
10:47
Test SignInView - parte 3
08:52
Test SignInView - parte 4
03:20
Test HomeController - parte 1
09:53
Test HomeController - parte 2
11:01
Test HomeView - parte 1
12:15
Test HomeView - parte 2
09:56
Problemas al testear imágenes de internet
09:13
El widget MyNetworkImage
07:21
HomeView test - parte 3
10:13
HomeView test - parte 4
07:29
HomeView test - parte 5
12:15
HomeView test - parte 6
05:10
Test MovieController
08:13
Test MovieView - parte 1
09:13
Test MovieView - parte 2
11:54
Test MovieView - parte 3
12:28
Test MovieView - parte 4
10:30
Test MovieView - parte 5
06:54
Test ProfileView - parte 1
11:58
Test ProfileView - parte 2
09:59
Test ProfileView - parte 3
14:13
Test FavoritesController - parte 1
11:00
Test FavoritesController - parte 2
05:25
Test FavoritesView - parte 1
11:46
Test FavoritesView - parte 2
09:43
Test FavoritesView - parte 3
10:11
Test FavoritesView - parte 4
09:20
Coverage ignore
12:52
Migración a Navigator 2.0 con go_router01:00:20
Definiendo las rutas
08:21
Refactor Splash
13:36
Eliminando navigator 1.0
09:06
SplashView darkMode
03:21
Adaptando Navigator 2.0 para ser amigable con widget testing
06:30
Refactor tests - parte 1
10:16
Refactor tests - parte 2
09:08
5.0
2 Reseñas
5.0
2
M
Miguel Antonio Rincon
hace un año

Buenisimo

Christian Colman
hace 8 meses
  • 86:55:31 de video.
  • Accesso de por vida.
  • Comentarios del curso
  • Chat privado con el instructor
Inicie sesión para comprar este curso