Recorrido
Aprende Dart
Un curso de Dart online, gratis e interactivo. Escribes Dart en cada lección — sintaxis, clases, async/await, futures y las bases que necesitas para Flutter — con pistas de IA cuando el async se pone raro, y un certificado gratis al terminar.
17,492+ codders inscritos
- Apto para principiantes
Ayuda de codificación con IA
Lecciones interactivas prácticas
Narración de audio en cada lección
Cuestionarios para poner a prueba tu conocimiento
Certificado gratuito de finalización
Programa
Sección 1
Fundamentos
Empezar secciónEmpezarExpandirContraerConstruye una base sólida con conceptos esenciales y habilidades básicasIntroducción a Dart
4 lecciones224- 01¿Qué es Dart?Reto
- 02La función mainQuiz
- 03Imprimir salidaRetoQuiz
- 04Comentarios de códigoQuiz
Variables y Tipos de Datos Básicos
11 lecciones1075- 01¿Qué son las Variables?Quiz
- 02CadenasRetoQuiz
- 03Enteros (int)RetoQuiz
- 04Dobles (double)RetoQuiz
- 05Booleanos (bool)RetoQuiz
- 06Inferencia de Tipos con 'var'RetoQuiz
- 07Variables FinalesRetoQuiz
- 08Variables ConstantesRetoQuiz
- 09Convenciones de NombresRetoQuiz
- 10Seguridad Básica ante NullRetoQuiz
- 11Resumen - Declarando VariablesReto
Operadores Parte 1
6 lecciones638- 01Operadores AritméticosRetoQuiz
- 02División EnteraRetoQuiz
- 03Operador MóduloRetoQuiz
- 04Incremento y DecrementoRetoQuiz
- 05Atajos de AsignaciónRetoQuiz
- 06Resumen - Cálculos SimplesReto
Operadores Parte 2
6 lecciones636- 01Operadores de ComparaciónRetoQuiz
- 02AND LógicoRetoQuiz
- 03OR LógicoRetoQuiz
- 04NOT LógicoRetoQuiz
- 05Operadores de Prueba de TipoRetoQuiz
- 06Resumen - Realizando ComparacionesReto
Operadores Parte 3
3 lecciones320- 01Operador null-awareRetoQuiz
- 02Acceso null-awareRetoQuiz
- 03Operador condicionalRetoQuiz
Flujo de Control - Toma de Decisiones
6 lecciones636- 01La sentencia 'if'RetoQuiz
- 02La sentencia 'else'RetoQuiz
- 03La sentencia 'else if'RetoQuiz
- 04Resumen - Decisiones SimplesReto
- 05Sentencias 'if' AnidadasRetoQuiz
- 06La sentencia 'switch'RetoQuiz
Trabajando con Cadenas
5 lecciones538- 01Concatenación de CadenasRetoQuiz
- 02Interpolación de CadenasRetoQuiz
- 03Cadenas MultilíneaRetoQuiz
- 04Propiedades de CadenasRetoQuiz
- 05Métodos Básicos de CadenasRetoQuiz
Flujo de control - Bucles
6 lecciones637- 01El bucle 'for'RetoQuiz
- 02El bucle 'while'RetoQuiz
- 03El bucle 'do-while'RetoQuiz
- 04Usando 'break' en buclesRetoQuiz
- 05Usando 'continue' en buclesRetoQuiz
- 06Resumen - Código repetitivoReto
Colecciones - Listas Básicas
8 lecciones759- 01¿Qué son las listas?Quiz
- 02Creando una listaRetoQuiz
- 03Accediendo por índiceRetoQuiz
- 04Obteniendo la longitud de la listaRetoQuiz
- 05Agregando elementosRetoQuiz
- 06Eliminando elementosRetoQuiz
- 07Comprobando si una lista está vacíaRetoQuiz
- 08Iterando sobre una listaRetoQuiz
Colecciones - Conceptos básicos de Mapas
8 lecciones757- 01¿Qué son los Mapas?Quiz
- 02Creando un MapaRetoQuiz
- 03Accediendo a Valores por ClaveRetoQuiz
- 04Pares Clave-ValorRetoQuiz
- 05Obteniendo el Tamaño del MapaRetoQuiz
- 06Obteniendo las ClavesRetoQuiz
- 07Obteniendo los ValoresRetoQuiz
- 08Verificando si una Clave ExisteRetoQuiz
Fundamentos de Funciones
8 lecciones753- 01¿Qué son las funciones?Quiz
- 02Definiendo una función básicaRetoQuiz
- 03Llamando a una funciónRetoQuiz
- 04Funciones con parámetrosRetoQuiz
- 05Funciones que devuelven valoresRetoQuiz
- 06La palabra clave 'void'RetoQuiz
- 07Sintaxis de flechaRetoQuiz
- 08Resumen - Funciones simplesReto
Funciones Avanzadas
5 lecciones532- 01Parámetros Posicionales OpcionalesRetoQuiz
- 02Parámetros NombradosRetoQuiz
- 03Parámetros Nombrados RequeridosRetoQuiz
- 04Valores de Parámetro por DefectoRetoQuiz
- 05Resumen - Parámetros de FunciónReto
Null Safety en Profundidad
6 lecciones639- 01Comprendiendo NullRetoQuiz
- 02Tipos NullableRetoQuiz
- 03Tipos No NullableRetoQuiz
- 04Operador de Afirmación NullRetoQuiz
- 05Inicialización TardíaRetoQuiz
- 06Resumen - Manejo Seguro de NullReto
Conversión de tipos
4 lecciones430- 01Convertir String a intRetoQuiz
- 02Convertir String a doubleRetoQuiz
- 03Convertir números a StringRetoQuiz
- 04Manejar errores de conversiónRetoQuiz
Proyecto: Calculadora Simple
Proyecto5 lecciones1- 01ConfigurandoReto
- 02Declarando NúmeroProyecto
- 03Creando una OperaciónProyecto
- 04Realizando CálculoProyecto
- 05Mostrando ResultadoProyecto
Desafíos Fundamentales
3 lecciones3- 01Desafío: Lista de cálculosReto
- 02Desafío: Suma de númerosReto
- 03Desafío: Encontrar productoReto
Sección 2
Lógica y Flujo
Empezar secciónEmpezarExpandirContraerDomina la programación avanzada en Dart con un enfoque en estructuras de datos y control de flujo. Aprende a trabajar con arrays complejos, colecciones, manejo de errores y gestión del tiempo.Manipulación avanzada de listas
9 lecciones959- 01Propiedades de listas: first y lastRetoQuiz
- 02Estado de la lista: isEmpty y isNotEmptyRetoQuiz
- 03Invertir una listaRetoQuiz
- 04Añadir a una lista: insertRetoQuiz
- 05Eliminación en listas: removeWhereRetoQuiz
- 06Búsqueda en una lista: indexOfRetoQuiz
- 07Ordenar una listaRetoQuiz
- 08Mezclar una listaRetoQuiz
- 09Resumen - Organizador de listasReto
Operaciones funcionales con listas
7 lecciones746- 01Transformar con 'map'RetoQuiz
- 02Filtrar con 'where'RetoQuiz
- 03Uso de '.toList()'RetoQuiz
- 04Comprobar condiciones con 'any'RetoQuiz
- 05Condiciones con 'every'RetoQuiz
- 06Búsqueda con 'firstWhere'RetoQuiz
- 07Resumen - Filtrado de datosReto
Conjuntos
9 lecciones864- 01¿Qué es un Conjunto?Quiz
- 02Crear un ConjuntoRetoQuiz
- 03Añadir y eliminar elementos de un ConjuntoRetoQuiz
- 04Comprobar elementos en un ConjuntoRetoQuiz
- 05Convertir una lista en un ConjuntoRetoQuiz
- 06Unión de ConjuntosRetoQuiz
- 07Intersección de ConjuntosRetoQuiz
- 08Diferencia de ConjuntosRetoQuiz
- 09Resumen - Lista de invitados únicaReto
Manipulación avanzada de mapas
7 lecciones745- 01Iterar sobre un mapaRetoQuiz
- 02Comprobación de claves y valoresRetoQuiz
- 03Propiedades del mapa: keys y valuesRetoQuiz
- 04Adición condicional: putIfAbsentRetoQuiz
- 05Eliminar entradas de un mapaRetoQuiz
- 06Mapas anidadosRetoQuiz
- 07Resumen - Actualización de inventarioReto
Proyecto: Calculadora de carrito de compras
Proyecto5 lecciones1- 01Configuración del proyectoReto
- 02Agregar artículos al carritoProyecto
- 03Calcular el costo totalProyecto
- 04Aplicar un descuentoProyecto
- 05Mostrar el recibo finalProyecto
Manejo básico de errores
6 lecciones541- 01¿Qué son las excepciones?Quiz
- 02El bloque 'try-catch'RetoQuiz
- 03Capturar excepciones con 'on'RetoQuiz
- 04El bloque 'finally'RetoQuiz
- 05Lanzar una excepciónRetoQuiz
- 06Resumen - División seguraReto
Funciones avanzadas
7 lecciones646- 01Funciones anónimasRetoQuiz
- 02Pasar funciones como argumentosRetoQuiz
- 03Entendiendo los ClosuresRetoQuiz
- 04Introducción a la recursividadQuiz
- 05Función recursiva: Cuenta regresivaRetoQuiz
- 06Función recursiva: FactorialRetoQuiz
- 07Resumen - Procesador de listasReto
Proyecto: Analizador de texto simple
Proyecto7 lecciones18- 01Descripción general y configuración del proyectoRetoQuiz
- 02Contar caracteresProyecto
- 03Dividir el texto en palabrasProyecto
- 04Contar palabrasProyecto
- 05Contar palabras únicasProyecto
- 06Contador de frecuencia de palabrasProyecto
- 07Mostrar el análisisProyecto
Enumeraciones (Enums)
5 lecciones433- 01¿Qué son los Enums?Quiz
- 02Definir un Enum simpleRetoQuiz
- 03Uso de Enums en variablesRetoQuiz
- 04Enums en sentencias 'switch'RetoQuiz
- 05Resumen - SemáforoReto
Desafíos finales
3 lecciones3- 01Desafío: Clasificador de calificacionesReto
- 02Desafío: Contador de vocalesReto
- 03Desafío: FizzBuzzReto
Sección 3
Programación Orientada a Objetos
Empezar secciónEmpezarExpandirContraerDescubre cómo organizar el código con clases, objetos y estructuras reutilizablesFundamentos de POO
9 lecciones971- 01Archivos externosRetoQuiz
- 02Librerías e importacionesRetoQuiz
- 03Introducción a la POORetoQuiz
- 04Clases vs. ObjetosRetoQuiz
- 05La palabra clave thisRetoQuiz
- 06MétodosRetoQuiz
- 07Variables de instanciaRetoQuiz
- 08Conceptos básicos de constructoresRetoQuiz
- 09Resumen - Calculadora sencillaReto
Constructores en Dart
7 lecciones753- 01Constructor por defectoRetoQuiz
- 02Constructores nombradosRetoQuiz
- 03Listas de inicializaciónRetoQuiz
- 04Constructores constantesRetoQuiz
- 05Constructores de fábricaRetoQuiz
- 06Constructores de redireccionamientoRetoQuiz
- 07Resumen - Constructor de formasReto
Propiedades de clase
6 lecciones644- 01Miembros de instancia vs. estáticosRetoQuiz
- 02Campos Final y ConstRetoQuiz
- 03Variables LateRetoQuiz
- 04Métodos y campos estáticosRetoQuiz
- 05Getters y SettersRetoQuiz
- 06Resumen - Gestor de cuentas bancariasReto
Seguridad de nulos
7 lecciones754- 01Introducción a la seguridad de nulosRetoQuiz
- 02Nulables vs No nulablesRetoQuiz
- 03Los operadores ? y !RetoQuiz
- 04Palabra clave Late y Null SafetyRetoQuiz
- 05Operadores Null-awareRetoQuiz
- 06Null Safety en clasesRetoQuiz
- 07Resumen - Sistema de perfil de usuarioReto
Encapsulamiento
6 lecciones641- 01Miembros públicos vs. privadosRetoQuiz
- 02La convención del prefijo _RetoQuiz
- 03Privacidad a nivel de libreríaRetoQuiz
- 04Profundidad en Getters y SettersRetoQuiz
- 05Ocultamiento de informaciónRetoQuiz
- 06Resumen - Registros de estudiantesReto
Herencia
7 lecciones750- 01Herencia básicaRetoQuiz
- 02La palabra clave superRetoQuiz
- 03Sobrescritura de métodosRetoQuiz
- 04La anotación @overrideRetoQuiz
- 05La palabra clave final en clasesRetoQuiz
- 06Constructores y herenciaRetoQuiz
- 07Resumen - Jerarquía de empleadosReto
Clases abstractas e interfaces
7 lecciones753- 01Clases abstractasRetoQuiz
- 02Métodos abstractosRetoQuiz
- 03Interfaces en DartRetoQuiz
- 04Interfaces implícitasRetoQuiz
- 05Implementar vs. ExtenderRetoQuiz
- 06Interfaces múltiplesRetoQuiz
- 07Repaso - Calculadora de figurasReto
Mixins
7 lecciones752- 01Introducción a los MixinsRetoQuiz
- 02Creación de MixinsRetoQuiz
- 03Uso de múltiples MixinsRetoQuiz
- 04Palabra clave on en MixinsRetoQuiz
- 05Mixin vs HerenciaRetoQuiz
- 06Mixin vs InterfazRetoQuiz
- 07Resumen - Sistema AnimalReto
Polimorfismo
6 lecciones643- 01Fundamentos del polimorfismoRetoQuiz
- 02Polimorfismo mediante interfacesRetoQuiz
- 03Comprobación de tipos en tiempo de ejecuciónRetoQuiz
- 04Los operadores is y asRetoQuiz
- 05Palabra clave covariantRetoQuiz
- 06Resumen - Procesador de pagosReto
Colecciones y Genéricos
7 lecciones754- 01Visión general de List, Set y MapRetoQuiz
- 02Colecciones con seguridad de tiposRetoQuiz
- 03Clases genéricasRetoQuiz
- 04Métodos genéricosRetoQuiz
- 05Restricciones genéricasRetoQuiz
- 06Iterable e IteratorRetoQuiz
- 07Resumen - Almacenamiento genéricoReto
Métodos especiales
6 lecciones643- 01Sobrescritura de toString()RetoQuiz
- 02Sobrescritura de hashCode y ==RetoQuiz
- 03Interfaz ComparableRetoQuiz
- 04Método call()RetoQuiz
- 05Sobrescritura de noSuchMethodRetoQuiz
- 06Resumen - Colección personalizadaReto
POO Asíncrona
6 lecciones645- 01Futures y async/awaitRetoQuiz
- 02Fundamentos de StreamsRetoQuiz
- 03Stream ControllersRetoQuiz
- 04Constructores asíncronosRetoQuiz
- 05Asincronía en métodos de claseRetoQuiz
- 06Repaso - Data FetcherReto
Conceptos avanzados de POO
7 lecciones764- 01Composición vs. HerenciaRetoQuiz
- 02Métodos de extensiónRetoQuiz
- 03Clases invocablesRetoQuiz
- 04Clases selladas (Dart 3)RetoQuiz
- 05Records (Dart 3)RetoQuiz
- 06Patrones y coincidencia (3.0)RetoQuiz
- 07Enums con métodosRetoQuiz
Patrones de diseño Parte 1
5 lecciones543- 01Introducción a los patrones de diseñoRetoQuiz
- 02Patrón SingletonRetoQuiz
- 03Patrón FactoryRetoQuiz
- 04Patrón ObserverRetoQuiz
- 05Patrón StrategyRetoQuiz
Patrones de diseño Parte 2
7 lecciones763- 01Patrón CommandRetoQuiz
- 02Patrón AdapterRetoQuiz
- 03Patrón DecoratorRetoQuiz
- 04Patrón Template MethodRetoQuiz
- 05Patrón StateRetoQuiz
- 06Patrón CompositeRetoQuiz
- 07Patrón RepositoryRetoQuiz
Proyecto: Gestión de biblioteca
Proyecto6 lecciones1- 01Descripción general del proyectoReto
- 02Clases de Libros y UsuariosProyecto
- 03Sistema de préstamosProyecto
- 04Funcionalidad de búsquedaProyecto
- 05Interfaz de administradorProyecto
- 06Pruebas e integraciónProyecto
Desafíos finales
4 lecciones4- 01Plataforma de E-LearningReto
- 02Sistema bancarioReto
- 03Sistema de personajes de juegoReto
- 04Servicio de alquiler de vehículosReto
Por qué aprender Dart con Coddy
- Escribe y ejecuta código Dart real en tu navegador. Sin instalar el Dart SDK ni configurar el toolchain de Flutter. Cada lección compila tu programa de Dart en el servidor y te muestra la salida al instante.
- Dart como lo usan los desarrolladores de Flutter en el día a día: variables y tipos, control de flujo, funciones, clases y herencia, genéricos, null-safety, futures, async/await, streams. Las bases de Dart que todo desarrollador de Flutter necesita.
- Las pistas de IA te ayudan a leer y corregir errores de Dart y bugs de async sin arruinarte la respuesta, así que conceptos como null-safety y futures terminan haciendo clic en vez de confundirte.
- Certificado gratis de Dart al terminar el curso. Una señal creíble para puestos de Flutter y desarrollo móvil, donde Dart es el lenguaje principal.
Preguntas frecuentes sobre aprender Dart
¿Para qué se usa Dart?
Dart se usa principalmente para crear apps con Flutter, el framework de UI multiplataforma de Google que apunta a iOS, Android, web, Windows, macOS y Linux desde un solo código base. Fuera de Flutter, Dart también se usa para herramientas de línea de comandos y código del lado del servidor, pero hoy la razón principal por la que la gente aprende Dart es Flutter.
¿Es difícil aprender Dart?
Dart es uno de los lenguajes con tipado estático más fáciles de aprender. Su sintaxis le resulta familiar a cualquiera que haya visto Java, JavaScript o C#, y cuenta con un sólido null-safety que evita errores comunes. La mayoría de los principiantes logra su primer programa Dart funcional en la primera hora y empieza a escribir clases en menos de una semana.
¿Debería aprender Dart antes que Flutter?
Sí — al menos lo básico. Avanzarás mucho más rápido en Flutter cuando la sintaxis de Dart, las clases, async/await y null-safety te resulten naturales. El curso de Dart está pensado justamente como una rampa hacia Flutter, así que cubres las partes de Dart que aparecen en código real de Flutter.
¿Cuánto toma aprender Dart?
Los fundamentos de Dart —variables, flujo de control, funciones, clases— toman de una a dos semanas con práctica diaria. Sentirte cómodo con async/await, futures y null-safety suele tomar otras dos a cuatro semanas. A partir de ahí, puedes pasar a Flutter y seguir aprendiendo características avanzadas de Dart a medida que las necesites.
¿Puedo aprender Dart online y gratis?
Sí. El curso interactivo de Dart es gratis — lecciones, ejercicios de código, cuestionarios y certificado. Dart se compila del lado del servidor, así que no necesitas instalar el Dart SDK ni configurar Flutter localmente para empezar a escribir código Dart real.
¿Recibo un certificado al terminar el curso de Dart?
Sí. Al terminar el curso de Dart obtienes un certificado de finalización gratis. Una prueba verificable que puedes agregar a tu currículum o compartir en LinkedIn, muy útil como trampolín hacia el desarrollo con Flutter.