A biblioteca dart:core é a biblioteca padrão principal do Dart, importada implícita e automaticamente. Ela disponibiliza as funcionalidades fundamentais essenciais da linguagem. Abaixo estão seus recursos principais e exemplos de código organizados por módulos.
O desenvolvedor não precisa escrever nenhuma instrução de import; essa biblioteca é carregada por padrão de forma automática.
I. Saída no console
Função de nível superior print(): invoca automaticamente o método toString() do objeto para exibir texto.
void main() {
var tea = "milk tea";
print(tea);
print('I drink $tea.');
}Code language: Dart (dart)
II. Tipos numéricos: num / int / double
- Relação de herança:
intedoubleherdam denum - Conversão de string para número:
parse(); int aceita o parâmetro radix para definir a base numérica - Conversão de número para string:
toString(): conversão básicatoStringAsFixed(n): mantém n casas decimaistoStringAsPrecision(n): n algarismos significativos
void main() {
// Converter string para número
assert(int.parse('42') == 42);
assert(int.parse('42', radix:16) == 66);
assert(double.parse('0.5') == 0.5);
// Converter número para string
assert(123.456.toStringAsFixed(2) == '123.46');
assert(123.456.toStringAsPrecision(2) == '1.2e+2');
}Code language: Dart (dart)
III. Strings & Expressões Regulares RegExp
- Objetos String são imutáveis (todos os métodos de alteração retornam novas strings); armazenam unidades de código UTF-16
- Métodos comuns: busca, substring, divisão, alteração de caixa, remoção de espaços
void main() {
var str = 'Never odd or even';
// Consultas
assert(str.contains('odd'));
assert(str.startsWith('Never'));
assert(str.endsWith('even'));
assert(str.indexOf('odd') == 6);
// Substring e divisão
assert(str.substring(6,9) == 'odd');
var parts = 'a b c'.split(' ');
// Remover espaços e verificação de vazio
assert(' abc '.trim() == 'abc');
assert(''.isEmpty);
assert(' '.isNotEmpty);
// Alterar caixa para maiúsculas
assert('dart'.toUpperCase() == 'DART');
// Utilize StringBuffer para concatenação (melhor desempenho)
var sb = StringBuffer();
sb.write('Hello ');
sb.writeAll(['A','B','C'], ',');
print(sb.toString());
}Code language: Dart (dart)
Expressões Regulares RegExp
void main() {
var reg = RegExp(r'\d+'); // Corresponde a sequências de dígitos
var text = 'llamas live 15 to 20 years';
assert(reg.hasMatch(text));
// Iterar todas as correspondências globais
for(var m in reg.allMatches(text)){
print(m.group(0));
}
// Substituir trechos correspondentes
var res = text.replaceAll(reg, 'XX');
print(res);
}Code language: Dart (dart)
Observação: Uma unidade de código nem sempre equivale a um caractere visível. Para caracteres Unicode complexos (combinações de emojis), utilize o pacote externo
characters.
IV. Coleções (List / Set / Map)
1. List: ordenada, aceita duplicatas, acesso por índice
void main() {
var fruits = ['apple','orange'];
fruits.add('kiwi');
fruits.addAll(['grape']);
fruits.removeAt(0);
fruits.sort((a,b)=>a.compareTo(b)); // Ordenar elementos
// Restrição genérica
var strList = <String>[];
}Code language: Dart (dart)
2. Set: não ordenado, elementos únicos, sem acesso por índice
void main() {
var set = <String>{};
set.addAll(['gold','xenon']);
set.add('gold'); // Adição duplicada não surte efeito
assert(set.contains('xenon'));
// Operação de interseção
var set2 = Set.from(['xenon','argon']);
var inter = set.intersection(set2);
}Code language: Dart (dart)
3. Map: coleção de pares chave-valor; as chaves são únicas
void main() {
var map = {54: 'xenon'};
print(map[54]);
assert(map.containsKey(54));
map.remove(54);
// Atribuir valor apenas se a chave não existir
map.putIfAbsent('name', () => 'Dart');
// Iterar entradas
map.forEach((k,v)=>print('$k:$v'));
}Code language: Dart (dart)
4. Operações genéricas Iterable (List e Set implementam Iterable)
Métodos de ordem superior comuns: forEach, map, where, any, every
void main() {
var list = ['green','black','chamomile'];
list.forEach(print);
// map é avaliado de forma preguiçosa; toList executa imediatamente
var upperList = list.map((e)=>e.toUpperCase()).toList();
// Filtrar elementos
var filter = list.where((e)=>e == 'chamomile');
assert(list.any((e)=>e == 'chamomile'));
assert(!list.every((e)=>e.contains('tea')));
}Code language: Dart (dart)
V. Manipulação de URI (Uri)
Usado para codificação, decodificação, análise e construção de URLs
encodeFull: codifica apenas espaços e caracteres similares, mantém símbolos de URL/ : ? &encodeComponent: escapa todos os caracteres especiais (ideal para codificar valores de parâmetros)
void main() {
// Analisar url
var uri = Uri.parse('https://example.org:8080/foo?lang=dart#frag');
print(uri.scheme);
print(uri.host);
print(uri.queryParameters);
// Construir url
var newUri = Uri.https('example.org','/foo', {'lang':'dart'});
}Code language: Dart (dart)
VI. Data e Hora DateTime & Duration
DateTime: instante no tempo, suporta horário local e UTCDuration: intervalo de tempo, usado para somar/subtrair instantes e calcular diferenças
void main() {
var now = DateTime.now();
var y2k = DateTime.utc(2000);
// Adição e subtração de tempo
var nextYear = y2k.add(const Duration(days:366));
var diff = nextYear.difference(y2k);
print(diff.inDays);
// Timestamp (milissegundos desde a época Unix 1970-01-01 UTC)
print(y2k.millisecondsSinceEpoch);
}Code language: Dart (dart)
Aviso: Deslocamentos baseados em dias podem causar erros com mudança de horário de verão. Prefira utilizar horário UTC.
VII. Interfaces e Classes Base Úteis
1. Comparable: possibilita comparação de objetos para ordenação
class Line implements Comparable<Line> {
final int length;
const Line(this.length);
@override
int compareTo(Line other) => length - other.length;
}Code language: Dart (dart)
2. Chaves personalizadas para Map: sobrescrever == e hashCode
Regra: Objetos iguais devem ter o mesmo hashCode
class Person {
final String first, last;
Person(this.first,this.last);
@override
int get hashCode => Object.hash(first, last);
@override
bool operator ==(Object other) =>
other is Person && other.first == first && other.last == other.last;
}Code language: Dart (dart)
- 3. Iterable + Iterator
Implementar Iterable permite usar laços for-in com lógica de travessia customizada.
VIII. Tratamento de Exceções
- Error: falha grave, geralmente não capturável (ex: NoSuchMethodError)
- Exception: anomalia previsível que pode ser capturada; é possível criar exceções personalizadas
class FooException implements Exception {
final String? msg;
const FooException([this.msg]);
@override
String toString() => msg ?? 'FooException';
}Code language: Dart (dart)
IX. Referências Fracas e Finalizadores
WeakReference: referência fraca, não impede o coletor de lixo de liberar o objeto alvoFinalizer / NativeFinalizer: executa callback quando o objeto é coletado, para liberar recursos nativosFinalizable: evita coleta prematura do objeto pelo GC
Biblioteca padrão principal dart:core