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
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.
Códigos fuente | 00:31 |
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 |
Instalar flutter en windows | 17:21 |
Instalar flutter en macOS | 18:47 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
Super initializers | 06:02 |
Enumerados con miembros | 10:38 |
Asserts | 10:57 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
Buenisimo