Os básicos de Dart

Hello World


Todo aplicativo tem uma função main(). Para exibir texto no console, você pode usar a função print() :
void main() {
    print('Hello, World!');
}

Variáveis


Mesmo no código Dart de tipo seguro, a maioria das variáveis não precisa de tipos explícitos, graças à inferência de tipos. Usar 'var' permite que a variável seja modificada posteriormente. Se a variável não precisa de sermodificada usa 'final'.
var name = 'Voyager I';
var year = 1977;
final antennaDiameter = 3.7;
final flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
var image = {
  'tags': ['saturn'],
  'url': '//path/to/saturn.jpg'
};

Comente


Usa // ou /* */ para comentar.
// This is a normal, one-line comment.

/// This is a documentation comment, used to document libraries,
/// classes, and their members. Tools like IDEs and dartdoc treat
/// doc comments specially.

/* Comments like these are also supported. */

Imports


Para acessar APIs definidas em outras bibliotecas, use import.
// Importing core libraries
import 'dart:math';

// Importing libraries from external packages
import 'package:test/test.dart';

// Importing files
import 'path/to/my_other_file.dart';

If / else if / else


if (year >= 2001) {
  print('21st century');
} else if (year >= 1901) {
  print('20th century');
}

For


Você pode iterar diretamente em um objeto ou classicamente.
for (final object in flybyObjects) {
  print(object);
}

for (int month = 1; month <= 12; month++) {
  print(month);
}

While


while (year < 2016) {
  year += 1;
}

Funções


Aqui você tem a definição e a chamada de uma função.
int fibonacci(int n) {
  if (n == 0 || n == 1) return n;
  return fibonacci(n - 1) + fibonacci(n - 2);
}

var result = fibonacci(20);

Enums


Enums são uma maneira de enumerar um conjunto predefinido de valores ou instâncias de uma maneira que garante que não haja outras instâncias desse tipo.
enum PlanetType { terrestrial, gas, ice }

Classes


Aqui está um exemplo de uma classe com três propriedades, dois construtores e um método.
class Spacecraft {
  String name;
  DateTime? launchDate;

  // Read-only non-final property
  int? get launchYear => launchDate?.year;

  // Constructor, with syntactic sugar for assignment to members.
  Spacecraft(this.name, this.launchDate) {
    // Initialization code goes here.
  }

  // Method.
  void describe() {
    print('Spacecraft: $name');
    // Type promotion doesn't work on getters.
    var launchDate = this.launchDate;
    if (launchDate != null) {
      int years = DateTime.now().difference(launchDate).inDays ~/ 365;
      print('Launched: $launchYear ($years years ago)');
    } else {
      print('Unlaunched');
    }
  }
}

Chamada de classe


Definição de classes com parâmetros e chamade.
var voyager = Spacecraft('Voyager I', DateTime(1977, 9, 5));
voyager.describe();

Herança


Classes podem ser herdadas
class Orbiter extends Spacecraft {
  double altitude;

  Orbiter(super.name, DateTime super.launchDate, this.altitude);
}

Interfaces e abstract classes


Você pode criar uma classe abstrata para ser estendida (ou implementada) por uma classe concreta. Classes abstratas podem conter métodos abstratos (com corpos vazios).
abstract class Describable {
  void describe();

  void describeWithEmphasis() {
    print('=========');
    describe();
    print('=========');
  }
}

Implements


Dart não tem palavra-chave de interface. Em vez disso, todas as classes definem implicitamente uma interface. Você pode implementar qualquer classe.
class MockSpaceship implements Spacecraft {
  // ···
}

Usar uma exceção


Para gerar uma exceção, use throw:
if (astronauts == 0) {
  throw StateError('No astronauts.');
}

Criar exceção


Para capturar uma exceção, use uma instrução try com on ou catch:
try {
  for (final object in flybyObjects) {
    var description = await File('$object.txt').readAsString();
    print(description);
  }
} on IOException catch (e) {
  print('Could not describe object: $e');
} finally {
  flybyObjects.clear();
}