O guia de Dart
Voltar para home
Hello, Dart!
Uma breve história
Mas por que Dart?
Ecossistema
Facilidade de aprendizado
Executando o código
Dartpad
Utilizando IDE
Primeiro programa
Até aqui
O básico
Operadores
Operadores aritméticos
Operadores relacionais e de equalidade
Operadores lógicos
Operadores de manipulação de bits
Operadores de atribuição
Operadores de incremento e decremento
Operadores de validação e tipos
Operadores gerais
Operadores de nulidade
Precedência de operadores
Estruturas de controle
if / else
switch / case
while
do while
for
for in
assert
Se liga aí
É com você
Até aqui
Benditos tipos
Afinal, que raios é um tipo?
Sistemas de tipagem
Coercion
weak e strong
E onde entra Dart?
Inferência
Static ou dynamic? O melhor de dois mundos
Quais os tipos existentes em Dart?
Os números
Booleanos
Symbols
Bem-vinda, null safety!
Nullable types
Type promotion
O operador bang!
Se liga aí
Strings
Interpolação de Strings
Otimização
Sob demanda
Muito mais
Se liga aí
Na prática - Palíndromo
É com você
Variando um pouco
E o tal do static?
final x const
late
Se liga aí
É com você
Até aqui
Explorando mais as funções e a Web
Funções! Métodos! Closures?
Funções como objetos
Retorno de funções e o void
O novato: Never
Escopo, ao infinito e além
Aproveitando o tear-off
Na prática - Dart web
Criando o projeto
Dart e a web
Iniciando o jogo e métodos
Parâmetros
Posicional e obrigatório
Posicional e opcional
Nomeado e opcional
Nomeado e obrigatório
Declarando as regras do jogo
Manipulando o DOM do jogo
Enums
Definindo o vencedor da partida
Typedef
Adicionando interação ao jogo
Se liga aí
É com você
Até aqui
Cuidando dos erros
Error versus Exception
Lançando exceções
Suas próprias exceptions
Seus próprios errors? Lance um existente ou use um assert!
Utilizando assert
Capturando exceções
Especifiando o tipo com on
Garantindo execução com finally
Se liga aí
É com você
Até aqui
Entendendo as libraries
Criando uma library
Utilizando outras libraries
Criando um alias
Personalizando os recursos importados
Privacidade em libraries
Separando libraries em arquivos
Devo separar todas as libraries em arquivos?
Se liga aí
É com você
Até aqui
Na prática - Packages
Os packages
Criando o package de logger
Modificando o pubspec.yaml
Organizando os arquivos existentes
Exportando libraries
Testando o package
Adicionando linter para o código
Utilizando regras de packages
Import dinâmico de libraries
Testando o package na web
Documentando libraries
Se liga aí
É com você
Até aqui
Oriente seus objetos
Classes e objetos
Sobrescrita de operadores
Construtores
Construtores padrão
Construtores nomeados
Construtores constantes
Construtores factory
Relacionamento entre objetos
Herança
Polimorfismo
Classes abstratas
Interfaces
Mixins
Mixins a fundo
Afinal, devo usar herança, interface ou mixin?
As incríveis Extensions
Se liga aí
É com você
Até aqui
Generics<T> e as estruturas de dados
O que é esse tal de generics?
Restringindo um tipo
Métodos genéricos
Se liga aí
Estruturas de dados
List
A interface Iterable
Set
A interface Comparable
Queue
Map
Se liga aí
É com você
Até aqui
Concorrência
Isolates
Event Loop
Síncrono versus assíncrono
Futures
Future encadeado
Erros em uma cadeia assíncrona
Future.sync
Future.microtask
Future.value
Future.error
Future.wait
Future/any
Async e await
Um jeito síncrono de trabalhar com assíncrono?
Tratando erros com async await
Completer
Se liga aí
É com você
Até aqui
Na prática - Dart CLI
API da Climatempo
Criando o projeto
Requisições com o package http
Package convert e JSON
Consumindo a API do Climatempo
Tratando os argumentos de CLI
Rodando um app CLI de qualquer lugar
Compilando AOT
Binários independentes
Até aqui
Stream é tão funcional...
O que é uma Stream?
Inscrição única versus broadcast
StreamController
Interface Sink
StreamController versus StreamSink
Estados do StreamController
Stream e o await
Operações em Streams
Propriedades
Métodos de busca
Métodos de validação
Métodos de validação
Métodos utilitários
Até aqui
Um pouco mais sobre Streams
Transformando uma Stream
Implementando a interface StreamTransformer
Construtor padrão do StreamTransformer
Estendendo StreamTransformerBase
Construtor nomeado fromHandlers
Construtor nomeado fromBind
Inscrição única versus broadcast, um pouco além
Ciclo de vida
Facilidade de uso
Perda de eventos
Geradores
Geradores síncronos
Geradores assíncronos
Na prática - Server HTTP
Server em Dart
Funcionalidade de alertas
Criando o Client
Se liga aí
É com você
Até aqui
Um pouco mais sobre Isolares e Zones
Criando uam nova Isolate
Comunicação unidirecional
Comunicação bidirecional
Controlando uma Isolate
Cadastrando listeners
Isolate através de uma URI
Zones
Hierarquia de zones
Por que criar uma zone?
Uma zone livre de erros
Propagação de erros entre zones
Valores locais
Sobrescrevendo funcionalidades com ZoneSpecification
Se liga aí
É com você
Até aqui
Na prática - Gerando arquivos
Manipulando arquivos em Dart
Criando um diretório
Criando e escrevendo em um arquivo
Escrevendo em um arquivo sob demanda
Lendo um arquivo
Lendo um arquivo sob demanda
Climatempo - Salvando consultas
Criando o arquivo de cidades
Criando o arquivo de clima
Arquivo em isolates separadas
Log de erros com zones
Se liga aí
É com você
Até mais, e obrigado pelos peixes!
Metadata
Geração de código
Testes unitários
DevTools
Interface para funções externas - FFI
Shelf
Explore o Flutter!
Contribua para projetos Open Source
Aprenda uma outra linguagem de programação