Jornada
Aprenda Dart
Um curso online de Dart, grátis e interativo. Você escreve Dart em cada aula — sintaxe, classes, async/await, futures e os fundamentos que você precisa para Flutter — com dicas de IA quando o async começa a complicar e um certificado grátis ao concluir.
17,492+ codders inscritos
- Ideal para iniciantes
Ajuda de codificação com IA
Lições interativas e práticas
Narração em áudio em todas as lições
Questionários para testar seu conhecimento
Certificado grátis de conclusão
Programa
Seção 1
Fundamentos
Começar seçãoIniciarExpandirRecolherConstrua uma base sólida com conceitos essenciais e habilidades básicasIntrodução ao Dart
4 lições224- 01O que é Dart?Desafio
- 02A função mainQuiz
- 03Imprimindo SaídaDesafioQuiz
- 04Comentários no CódigoQuiz
Variáveis e Tipos de Dados Básicos
11 lições1075- 01O que são Variáveis?Quiz
- 02StringsDesafioQuiz
- 03Inteiros (int)DesafioQuiz
- 04Double (double)DesafioQuiz
- 05Booleanos (bool)DesafioQuiz
- 06Inferência de Tipo com 'var'DesafioQuiz
- 07Variáveis finalDesafioQuiz
- 08Variáveis constantesDesafioQuiz
- 09Convenções de NomenclaturaDesafioQuiz
- 10Null Safety BásicaDesafioQuiz
- 11Resumo - Declarando VariáveisDesafio
Operadores Parte 1
6 lições638- 01Operadores AritméticosDesafioQuiz
- 02Divisão InteiraDesafioQuiz
- 03Operador MóduloDesafioQuiz
- 04Incremento e DecrementoDesafioQuiz
- 05Atalhos de AtribuiçãoDesafioQuiz
- 06Resumo - Cálculos SimplesDesafio
Operadores Parte 2
6 lições636- 01Operadores de ComparaçãoDesafioQuiz
- 02AND LógicoDesafioQuiz
- 03OR LógicoDesafioQuiz
- 04NOT LógicoDesafioQuiz
- 05Operadores de Teste de TipoDesafioQuiz
- 06Resumo - Fazendo ComparaçõesDesafio
Operadores Parte 3
3 lições320- 01Operador de NulidadeDesafioQuiz
- 02Acesso de NulidadeDesafioQuiz
- 03Operador CondicionalDesafioQuiz
Fluxo de Controle - Tomada de Decisões
6 lições636- 01A Instrução 'if'DesafioQuiz
- 02A Instrução 'else'DesafioQuiz
- 03A Instrução 'else if'DesafioQuiz
- 04Resumo - Decisões SimplesDesafio
- 05Instruções 'if' AninhadasDesafioQuiz
- 06A Instrução 'switch'DesafioQuiz
Trabalhando com Strings
5 lições538- 01Concatenação de StringsDesafioQuiz
- 02Interpolação de StringsDesafioQuiz
- 03Strings Multi-linhaDesafioQuiz
- 04Propriedades de StringsDesafioQuiz
- 05Métodos Básicos de StringsDesafioQuiz
Fluxo de Controle - Laços
6 lições637- 01O Laço 'for'DesafioQuiz
- 02O Laço 'while'DesafioQuiz
- 03O Laço 'do-while'DesafioQuiz
- 04Usando 'break' em LaçosDesafioQuiz
- 05Usando 'continue' em LaçosDesafioQuiz
- 06Resumo - Repetindo CódigoDesafio
Coleções - Listas Básicas
8 lições759- 01O que são Listas?Quiz
- 02Criando uma ListaDesafioQuiz
- 03Acessando por ÍndiceDesafioQuiz
- 04Obtendo o Tamanho da ListaDesafioQuiz
- 05Adicionando ElementosDesafioQuiz
- 06Removendo ElementosDesafioQuiz
- 07Verificando se uma Lista Está VaziaDesafioQuiz
- 08Iterando Sobre uma ListaDesafioQuiz
Coleções - Básicos de Mapas
8 lições757- 01O que são Mapas?Quiz
- 02Criando um MapaDesafioQuiz
- 03Acessando Valores por ChaveDesafioQuiz
- 04Pares Chave-ValorDesafioQuiz
- 05Obtendo o Tamanho do MapaDesafioQuiz
- 06Obtendo as ChavesDesafioQuiz
- 07Obtendo os ValoresDesafioQuiz
- 08Verificando se uma Chave ExisteDesafioQuiz
Fundamentos de Funções
8 lições753- 01O que são Funções?Quiz
- 02Definindo uma Função BásicaDesafioQuiz
- 03Chamando uma FunçãoDesafioQuiz
- 04Funções com ParâmetrosDesafioQuiz
- 05Funções que Retornam ValoresDesafioQuiz
- 06A Palavra-chave 'void'DesafioQuiz
- 07Sintaxe ArrowDesafioQuiz
- 08Resumo - Funções SimplesDesafio
Funções Avançadas
5 lições532- 01Parâmetros Posicionais OpcionaisDesafioQuiz
- 02Parâmetros NomeadosDesafioQuiz
- 03Parâmetros Nomeados ObrigatóriosDesafioQuiz
- 04Valores Padrão de ParâmetrosDesafioQuiz
- 05Resumo - Parâmetros de FunçãoDesafio
Null Safety em Profundidade
6 lições639- 01Entendendo NullDesafioQuiz
- 02Tipos NulláveisDesafioQuiz
- 03Tipos Não NulláveisDesafioQuiz
- 04Operador de Asserção de NullDesafioQuiz
- 05Inicialização TardiaDesafioQuiz
- 06Resumo - Lidando com Null de Forma SeguraDesafio
Conversão de Tipos
4 lições430- 01Convertendo String para intDesafioQuiz
- 02Convertendo String para doubleDesafioQuiz
- 03Convertendo Números para StringDesafioQuiz
- 04Tratando Erros de ConversãoDesafioQuiz
Projeto: Calculadora Simples
Projeto5 lições1- 01ConfigurandoDesafio
- 02Declarando NúmeroProjeto
- 03Criando uma OperaçãoProjeto
- 04Realizando CálculoProjeto
- 05Exibindo ResultadoProjeto
Desafios Fundamentais
3 lições3- 01Desafio: Lista de cálculosDesafio
- 02Desafio: Soma de númerosDesafio
- 03Desafio: Encontrar produtoDesafio
Seção 2
Lógica & Fluxo
Começar seçãoIniciarExpandirRecolherDomine a programação avançada em Dart com foco em estruturas de dados e controle de fluxo. Aprenda a trabalhar com arrays complexos, coleções, tratamento de erros e gerenciamento de tempo.Manipulação Avançada de Listas
9 lições959- 01Propriedades de Lista: first & lastDesafioQuiz
- 02Estado da Lista: isEmpty & isNotEmptyDesafioQuiz
- 03Invertendo uma ListaDesafioQuiz
- 04Adicionando a uma Lista: insertDesafioQuiz
- 05Remoção em Listas: removeWhereDesafioQuiz
- 06Buscando em uma Lista: indexOfDesafioQuiz
- 07Ordenando uma ListaDesafioQuiz
- 08Embaralhando uma ListaDesafioQuiz
- 09Recapitulação - Organizador de ListasDesafio
Operações Funcionais em Listas
7 lições746- 01Transformando com 'map'DesafioQuiz
- 02Filtrando com 'where'DesafioQuiz
- 03Usando '.toList()'DesafioQuiz
- 04Verificando Condições com 'any'DesafioQuiz
- 05Condições com 'every'DesafioQuiz
- 06Encontrando com 'firstWhere'DesafioQuiz
- 07Recapitulação - Filtragem de DadosDesafio
Conjuntos
9 lições864- 01O que é um Conjunto?Quiz
- 02Criando um ConjuntoDesafioQuiz
- 03Adicionando e Removendo de ConjuntosDesafioQuiz
- 04Verificando Elementos em um ConjuntoDesafioQuiz
- 05Convertendo uma Lista para um ConjuntoDesafioQuiz
- 06União de ConjuntosDesafioQuiz
- 07Interseção de ConjuntosDesafioQuiz
- 08Diferença de ConjuntosDesafioQuiz
- 09Recapitulação - Lista de Convidados ÚnicosDesafio
Manipulação Avançada de Mapas
7 lições745- 01Iterando sobre um MapDesafioQuiz
- 02Verificando Chaves e ValoresDesafioQuiz
- 03Propriedades do Map: keys & valuesDesafioQuiz
- 04Adição Condicional: putIfAbsentDesafioQuiz
- 05Removendo Entradas de um MapDesafioQuiz
- 06Maps AninhadosDesafioQuiz
- 07Recapitulação - Atualização de InventárioDesafio
Projeto: Cálculo de Carrinho de Compras
Projeto5 lições1- 01Configuração do ProjetoDesafio
- 02Adicionando Itens ao CarrinhoProjeto
- 03Calculando o Custo TotalProjeto
- 04Aplicando um DescontoProjeto
- 05Exibindo o Recibo FinalProjeto
Tratamento de Erros Básico
6 lições541- 01O que são Exceções?Quiz
- 02O Bloco 'try-catch'DesafioQuiz
- 03Capturando Exceções com 'on'DesafioQuiz
- 04O Bloco 'finally'DesafioQuiz
- 05Lançando uma ExceçãoDesafioQuiz
- 06Recapitulação - Divisão SeguraDesafio
Funções Avançadas
7 lições646- 01Funções AnônimasDesafioQuiz
- 02Passando Funções como ArgumentosDesafioQuiz
- 03Entendendo ClosuresDesafioQuiz
- 04Introdução à RecursividadeQuiz
- 05Função Recursiva: Contagem RegressivaDesafioQuiz
- 06Função Recursiva: FatorialDesafioQuiz
- 07Recapitulação - Processador de ListasDesafio
Projeto: Analisador de Texto Simples
Projeto7 lições18- 01Visão Geral e Configuração do ProjetoDesafioQuiz
- 02Contagem de CaracteresProjeto
- 03Dividindo o Texto em PalavrasProjeto
- 04Contagem de PalavrasProjeto
- 05Contagem de Palavras ÚnicasProjeto
- 06Contador de Frequência de PalavrasProjeto
- 07Exibindo a AnáliseProjeto
Enumerações (Enums)
5 lições433- 01O que são Enums?Quiz
- 02Definindo um Enum simplesDesafioQuiz
- 03Usando Enums em variáveisDesafioQuiz
- 04Enums em instruções 'switch'DesafioQuiz
- 05Recapitulação - SemáforoDesafio
Desafios Finais
3 lições3- 01Desafio: Ordenador de NotasDesafio
- 02Desafio: Contador de VogaisDesafio
- 03Desafio: FizzBuzzDesafio
Seção 3
Programação Orientada a Objetos
Começar seçãoIniciarExpandirRecolherDescubra como organizar o código com classes, objetos e estruturas reutilizáveisFundamentos de POO
9 lições971- 01Arquivos ExternosDesafioQuiz
- 02Bibliotecas e ImportaçõesDesafioQuiz
- 03Introdução à POODesafioQuiz
- 04Classes vs ObjetosDesafioQuiz
- 05A Palavra-chave thisDesafioQuiz
- 06MétodosDesafioQuiz
- 07Variáveis de InstânciaDesafioQuiz
- 08Fundamentos de ConstrutoresDesafioQuiz
- 09Recapitulação - Calculadora SimplesDesafio
Construtores em Dart
7 lições753- 01Construtor PadrãoDesafioQuiz
- 02Construtores NomeadosDesafioQuiz
- 03Listas de InicializaçãoDesafioQuiz
- 04Construtores ConstantesDesafioQuiz
- 05Construtores FactoryDesafioQuiz
- 06Construtores de RedirecionamentoDesafioQuiz
- 07Recapitulação - Shape BuilderDesafio
Propriedades de Classe
6 lições644- 01Membros de Instância vs EstáticosDesafioQuiz
- 02Campos Final & ConstDesafioQuiz
- 03Variáveis LateDesafioQuiz
- 04Métodos e Campos EstáticosDesafioQuiz
- 05Getters e SettersDesafioQuiz
- 06Recapitulação - Gerenciador de Conta BancáriaDesafio
Null Safety
7 lições754- 01Introdução ao Null SafetyDesafioQuiz
- 02Nullable vs Non-NullableDesafioQuiz
- 03Os Operadores ? e !DesafioQuiz
- 04Palavra-chave Late e Null SafetyDesafioQuiz
- 05Operadores Null-AwareDesafioQuiz
- 06Null Safety em ClassesDesafioQuiz
- 07Recapitulação - Sistema de Perfil de UsuárioDesafio
Encapsulamento
6 lições641- 01Membros Públicos vs PrivadosDesafioQuiz
- 02A Convenção do Prefixo _DesafioQuiz
- 03Privacidade em Nível de BibliotecaDesafioQuiz
- 04Aprofundamento em Getters & SettersDesafioQuiz
- 05Ocultação de InformaçãoDesafioQuiz
- 06Recapitulação - Registros de EstudantesDesafio
Herança
7 lições750- 01Herança BásicaDesafioQuiz
- 02A Palavra-chave superDesafioQuiz
- 03Sobrescrita de MétodoDesafioQuiz
- 04A Anotação @overrideDesafioQuiz
- 05A Palavra-chave final para ClassesDesafioQuiz
- 06Construtores e HerançaDesafioQuiz
- 07Recapitulação - Hierarquia de FuncionáriosDesafio
Classes Abstratas e Interfaces
7 lições753- 01Classes AbstratasDesafioQuiz
- 02Métodos AbstratosDesafioQuiz
- 03Interfaces em DartDesafioQuiz
- 04Interfaces ImplícitasDesafioQuiz
- 05Implementando vs EstendendoDesafioQuiz
- 06Múltiplas InterfacesDesafioQuiz
- 07Recapitulação - Calculadora de FormasDesafio
Mixins
7 lições752- 01Introdução aos MixinsDesafioQuiz
- 02Criando MixinsDesafioQuiz
- 03Usando Múltiplos MixinsDesafioQuiz
- 04Palavra-chave on em MixinsDesafioQuiz
- 05Mixin vs HerançaDesafioQuiz
- 06Mixin vs InterfaceDesafioQuiz
- 07Recapitulação - Sistema AnimalDesafio
Polimorfismo
6 lições643- 01Fundamentos do PolimorfismoDesafioQuiz
- 02Polimorfismo via InterfacesDesafioQuiz
- 03Verificação de Tipos em Tempo de ExecuçãoDesafioQuiz
- 04Os Operadores is & asDesafioQuiz
- 05Palavra-chave CovariantDesafioQuiz
- 06Recapitulação - Processador de PagamentosDesafio
Coleções e Generics
7 lições754- 01Visão Geral de List, Set e MapDesafioQuiz
- 02Coleções Type-SafeDesafioQuiz
- 03Classes GenéricasDesafioQuiz
- 04Métodos GenéricosDesafioQuiz
- 05Restrições de GenericsDesafioQuiz
- 06Iterable e IteratorDesafioQuiz
- 07Recapitulação - Armazenamento GenéricoDesafio
Métodos Especiais
6 lições643- 01Sobrescrita de toString()DesafioQuiz
- 02Sobrescrita de hashCode & ==DesafioQuiz
- 03Interface ComparableDesafioQuiz
- 04Método call()DesafioQuiz
- 05Sobrescrita de noSuchMethodDesafioQuiz
- 06Recapitulação - Coleção PersonalizadaDesafio
POO Assíncrona
6 lições645- 01Futures e async/awaitDesafioQuiz
- 02Fundamentos de StreamsDesafioQuiz
- 03Stream ControllersDesafioQuiz
- 04Construtores AssíncronosDesafioQuiz
- 05Async em Métodos de ClasseDesafioQuiz
- 06Recapitulação - Data FetcherDesafio
Conceitos Avançados de POO
7 lições764- 01Composição vs HerançaDesafioQuiz
- 02Métodos de ExtensãoDesafioQuiz
- 03Classes ChamáveisDesafioQuiz
- 04Classes Seladas (Dart 3)DesafioQuiz
- 05Records (Dart 3)DesafioQuiz
- 06Patterns & Matching (3.0)DesafioQuiz
- 07Enums com MétodosDesafioQuiz
Padrões de Projeto Parte 1
5 lições543- 01Introdução aos Padrões de ProjetoDesafioQuiz
- 02Padrão SingletonDesafioQuiz
- 03Padrão FactoryDesafioQuiz
- 04Padrão ObserverDesafioQuiz
- 05Padrão StrategyDesafioQuiz
Padrões de Projeto Parte 2
7 lições763- 01Padrão CommandDesafioQuiz
- 02Padrão AdapterDesafioQuiz
- 03Padrão DecoratorDesafioQuiz
- 04Padrão Template MethodDesafioQuiz
- 05Padrão StateDesafioQuiz
- 06Padrão CompositeDesafioQuiz
- 07Padrão RepositoryDesafioQuiz
Projeto: Gerenciamento de Biblioteca
Projeto6 lições1- 01Visão Geral do ProjetoDesafio
- 02Classes Livro e UsuárioProjeto
- 03Sistema de EmpréstimosProjeto
- 04Funcionalidade de BuscaProjeto
- 05Interface AdministrativaProjeto
- 06Testes e IntegraçãoProjeto
Desafios Finais
4 lições4- 01Plataforma de E-LearningDesafio
- 02Sistema BancárioDesafio
- 03Sistema de Personagens de JogoDesafio
- 04Serviço de Aluguel de VeículosDesafio
Por que aprender Dart com a Coddy
- Escreva e rode código Dart de verdade no navegador. Sem instalar o Dart SDK, sem configurar o toolchain do Flutter. Cada aula compila seu programa Dart no servidor e mostra a saída na hora.
- Dart como os desenvolvedores Flutter realmente usam: variáveis e tipos, controle de fluxo, funções, classes e herança, generics, null-safety, futures, async/await, streams. As bases de Dart que todo desenvolvedor Flutter precisa.
- As dicas de IA te ajudam a ler e corrigir erros de Dart e bugs assíncronos sem entregar a resposta, para que conceitos como null-safety e futures façam sentido em vez de te confundirem.
- Certificado de Dart gratuito ao concluir o curso. Um sinal confiável para vagas de Flutter e desenvolvimento mobile onde Dart é a linguagem principal.
Perguntas frequentes sobre aprender Dart
Para que serve a programação em Dart?
Dart é usado principalmente para criar apps Flutter — o framework de UI multiplataforma do Google, que entrega iOS, Android, web, Windows, macOS e Linux a partir de uma única base de código. Fora do Flutter, Dart também serve para ferramentas de linha de comando e código no servidor, mas hoje a razão principal pela qual as pessoas aprendem Dart é o Flutter.
Dart é difícil de aprender?
Dart é uma das linguagens com tipagem estática mais fáceis de aprender. A sintaxe é familiar para quem já viu Java, JavaScript ou C#, e ela tem null-safety forte para evitar bugs comuns. A maioria dos iniciantes consegue rodar seu primeiro programa em Dart na primeira hora e começa a escrever classes em uma semana.
Devo aprender Dart antes de Flutter?
Sim — pelo menos o básico. Você avança muito mais rápido no Flutter quando a sintaxe do Dart, classes, async/await e null-safety já são naturais. O curso de Dart foi pensado justamente como uma porta de entrada para o Flutter, então você vê as partes do Dart que realmente aparecem no código Flutter de verdade.
Quanto tempo leva para aprender Dart?
O básico de Dart — variáveis, controle de fluxo, funções, classes — leva de uma a duas semanas com prática diária. Ficar à vontade com async/await, futures e null-safety costuma levar mais duas a quatro semanas. Daí em diante, você já pode partir para o Flutter e ir absorvendo recursos avançados de Dart conforme precisar.
Posso aprender Dart online de graça?
Sim. O curso interativo de Dart é gratuito — aulas, exercícios de programação, quizzes e um certificado. O Dart compila no servidor, então você não precisa instalar o Dart SDK nem configurar o Flutter localmente para começar a escrever código Dart de verdade.
Recebo um certificado depois do curso de Dart?
Sim. Ao concluir o curso de Dart, você recebe um certificado de conclusão gratuito. Uma prova verificável para incluir no currículo ou compartilhar no LinkedIn, especialmente útil como trampolim para o desenvolvimento com Flutter.