Menu
Coddy logo textTech

Folha de Consulta Dart

Última atualização

Hello World e estrutura do programa

Todo programa Dart começa na função main de nível superior.

OperaçãoSintaxe
Ponto de entradavoid main() { ... }
Exibir uma linhaprint("Hello, World!");
Interpolação de stringprint("Hi $name");
Expressão na interpolaçãoprint("Sum: ${a + b}");
Comentário// this is a comment
Comentário de várias linhas/* ... */
Importar uma bibliotecaimport 'dart:math';
Executar um arquivodart run main.dart

Variáveis e tipos

Dart é tipado estaticamente, mas pode inferir tipos com var.

OperaçãoSintaxe
Variável inferidavar age = 30;
Tipo explícitoint age = 30;
Constante de tempo de compilaçãoconst pi = 3.14;
Constante de tempo de execuçãofinal name = getName();
Tipos básicosint, double, String, bool
Tipo dynamicdynamic x = 5;
Conversão de tipoint.parse("42"), n.toString()
Verificar tipox is String, x as String

Null safety

Os tipos são não anuláveis por padrão; adicione ? para permitir null.

OperaçãoSintaxe
Não anulável (padrão)int count = 0;
Tipo anulávelString? name;
Acesso ciente de nulluser?.name
Coalescência de nullname ?? "default"
Atribuição de coalescência de nullname ??= "default";
Afirmar não nuloname!
Inicialização tardialate String value;
Spread ciente de null[...?maybeList]

Strings

Strings oferecem suporte a aspas simples, duplas e triplas.

OperaçãoSintaxe
Comprimentos.length
Maiúsculas / minúsculass.toUpperCase(), s.toLowerCase()
Interpolação"Total: $price"
Concatenar"foo" + "bar"
Contéms.contains("ell")
Começa / termina coms.startsWith("he")
Dividir"a,b,c".split(",")
Substituirs.replaceAll("a", "b")
Substrings.substring(0, 3)
Trims.trim()

Coleções (List, Map, Set)

Três tipos centrais de coleção com sintaxe de literal.

OperaçãoSintaxe
Literal de listvar nums = [1, 2, 3];
Adicionar à listnums.add(4);
Acesso / comprimentonums[0], nums.length
Map / wherenums.map((n) => n * 2), nums.where((n) => n > 1)
Literal de mapvar ages = {"Ada": 30};
Acesso ao mapages["Ada"]
Literal de setvar ids = {1, 2, 3};
Operador spreadvar all = [...a, ...b];
Collection if / for[if (show) 1, for (n in xs) n]

Controle de fluxo

As condições vão entre parênteses; o switch oferece suporte a padrões.

OperaçãoSintaxe
If / elseif (x > 0) { ... } else { ... }
Ternáriovar r = x > 0 ? "pos" : "neg";
Switchswitch (n) { case 1: ...; default: ... }
Laço forfor (var i = 0; i < 10; i++) { ... }
Laço for-infor (var item in items) { ... }
forEachitems.forEach((x) => print(x));
Laço whilewhile (x < 100) { ... }
Do-whiledo { ... } while (x < 100);
Break / continuebreak;, continue;

Funções

Funções são de primeira classe; a sintaxe de arrow encurta expressões únicas.

OperaçãoSintaxe
Definir uma funçãoint add(int a, int b) { return a + b; }
Arrow functionint square(int x) => x * x;
Posicional opcionalvoid log(String m, [int? code]) { ... }
Parâmetros nomeadosvoid box({int w = 0, int h = 0}) { ... }
Nomeado obrigatóriovoid box({required int w}) { ... }
Função anônimavar f = (x) => x * 2;
Passar como argumentonums.map((n) => n * 2)
Typedeftypedef IntOp = int Function(int);

Classes e construtores

Classes guardam estado e comportamento; construtores vêm em várias formas.

OperaçãoSintaxe
Definir uma classeclass Point { int x; int y; }
ConstrutorPoint(this.x, this.y);
Construtor nomeadoPoint.origin() : x = 0, y = 0;
Criar instânciavar p = Point(1, 2);
Métododouble dist() { ... }
Getterint get area => w * h;
Herançaclass Circle extends Shape { ... }
Chamar supersuper(args)
Classe abstrataabstract class Shape { ... }
Implementar interfaceclass Dog implements Animal { ... }

Async (Future / async-await)

Futures representam valores disponíveis mais tarde; await pausa até que eles sejam resolvidos.

OperaçãoSintaxe
Função asyncFuture<int> load() async { ... }
Await em um futurevar data = await load();
Retornar um valorreturn 42; dentro de uma função async
Atrasoawait Future.delayed(Duration(seconds: 1));
Tratar errostry { await load(); } catch (e) { ... }
Encadeamento com thenload().then((v) => print(v));
Executar em paraleloawait Future.wait([a(), b()]);
Stream assíncronoawait for (var x in stream) { ... }

A sintaxe de Dart que você mais usa, em uma única página. Esta folha de consulta Dart é uma referência rápida para o núcleo da linguagem - variáveis e tipos, null safety, strings, coleções, controle de fluxo, funções, classes, e os futures e o async/await que você usa para escrever os apps por trás do Flutter.

Tudo aqui é Dart padrão e roda no SDK oficial. Copie o que precisar ou teste cada trecho ao vivo no playground de Dart - sem necessidade de instalação.

Perguntas frequentes sobre a folha de consulta Dart

Esta folha de consulta Dart é gratuita?
Sim. Esta folha de consulta Dart é totalmente gratuita, sem necessidade de cadastro. Salve nos favoritos e volte sempre que precisar consultar um operador de null safety, um método de coleção ou um padrão assíncrono.
Como funciona a null safety em Dart?
Em Dart, todo tipo é não anulável por padrão - int count nunca pode conter null. Para permitir null você adiciona um ? (String? name), e o compilador então o obriga a tratar o caso de null. Os auxiliares tornam isso conciso: ?. para acesso ciente de null, ?? para um valor de fallback e ! para afirmar que um valor não é nulo quando você tem certeza. Isso captura erros de null em tempo de compilação em vez de em tempo de execução.
O que é um Future e como funcionam o async e o await?
Um Future representa um valor que estará disponível mais tarde, como o resultado de uma chamada de rede. Marcar uma função como async permite usar await, que pausa a execução até o future ser concluído e então fornece o valor - assim você escreve código assíncrono que se lê de cima para baixo como código síncrono. Envolva os awaits em try/catch para tratar erros.
Posso praticar Dart online?
Sim. Abra o playground de Dart para executar qualquer trecho desta folha de consulta no seu navegador - sem SDK para instalar. Quando quiser estrutura, o curso interativo e gratuito de Dart da Coddy leva você passo a passo de null safety e coleções a classes e async/await.
Esta folha de consulta é boa para iniciantes?
Sim. Ela está organizada dos tópicos mais comuns (variáveis, null safety, controle de fluxo) até os avançados (classes, futures, async/await), de modo que você pode usar as seções de cima já no primeiro dia e ir avançando para o resto.
Coddy programming languages illustration

Aprenda Dart com a Coddy

COMEÇAR