//TODO: Complementar
Documentação oficial:
//TODO: Complementar
Uma ótima IDE para escrever código Dart é o VSCode.
O VSCode é um editor FREE, rápido, leve e com uma infinidade de extensões para diferentes linguagens de programação, o que faz com que ele seja uma ótima opção para diferentes usos, vale destacar também que ele ganhou com folga a primeira posição da pesquisa anual do Stack Overflow de 2021 (link) como a IDE mais utilizada por programadores.
Para instalar o VSCode, faça o download aqui: https://code.visualstudio.com/download
Depois da instalação do VSCode, instale a extensão do Dart:
É possível também treinar a sintaxe do Dart utilizando o DartPad, que é uma ferramenta on-line. Basta acessar o link abaixo, escrever o código e rodar:
//TODO: Complementar
print('Hello World');
var name = "Eduardo";
String fullName = "Eduardo Coutinho";
String? phone;
//TODO: Complementar
// Números
int meaningOfLife = 42;
double valueOfPi = 3.141592;
//Boleanos
bool visible = true;
// Texto
String shakespeareQuote = "All the world's a stage, ...";
// Data e Tempo
var now = DateTime.now();
var berlinWallFell = DateTime(1989, 11, 9);
var timeRemaining = const Duration(hours: 56, minutes: 14);
// Url
var dartlang = Uri.parse('http://dartlang.org/');
//Erros
Error();
var superheroes = ['Batman', 'Superman', 'Harry Potter'];
var numbers = <int>[];
List<int> numbers = <int>[];
Ordenando listas:
//ordenação de uma lista de strings
var superheroes = ['Batman', 'Superman', 'Harry Potter'];
superheroes.sort();
//para obter uma nova lista ordenada ao invés de ordenar a própria lista, use: ".."
var newList = superheroes..sort();
//ordem reversa:
var reverseList = superheroes..reverse();
//ordenando uma lista de objetos:
var users = [
User(name: 'Eduardo', type: 'admin'),
User(name: 'Coutinho', type: 'admin'),
User(name: 'Pedro', type: 'user'),
User(name: 'Paulo', type: 'user'),
User(name: 'Pietro', type: 'user'),
];
var usersSortedByName = users..sort((a, b) {
return a.name.compareTo(b.name);
});
//Ordenando por múltiplos atributos (subsorting)
var usersSortedByTypeAndName = users..sort((a, b) {
var comparisonResult = a.type.compareTo(b.type);
if (comparisonResult != 0) return comparisonResult;
return a.name.compareTo(b.name);
});
Lista não ordenada, de objetos únicos
var villains = {'Joker'}; // -> {'Joker'}
villains.addAll(['Joker', 'Lex Luthor', 'Voldemort']); //{'Joker', 'Lex Luthor', 'Voldemort'}
Lista chave/valor com valores únicos para as chaves
var sidekicks = {'Batman': 'Robin',
'Superman': 'Lois Lane'};
print(sidekicks); //{'Batman': 'Robin', 'Superman': 'Lois Lane'}
sidekicks.addAll('Harry Potter': 'Ron and Hermione');
print(sidekicks); //{'Batman': 'Robin', 'Superman': 'Lois Lane', 'Harry Potter': 'Ron and Hermione'}
var headers = <String, String>{'User-Agent': 'Chrome'};
var headers = <String, String>{
'User-Agent': 'Chrome',
'Content-Type': 'application/json'
};
var items = <String, String>{};
//TODO: Complementar
class Person {
String? name;
int? age;
}
Declarando formalment as variáveis do construtor:
class Car {
String make;
String model;
String yearMade;
bool hasABS;
Car(String make, String model, int year, bool hasABS) {
this.make = make;
this.model = model;
this.yearMade = year;
this.hasABS = hasABS;
}
}
É possível simplificar esse código, assim:
class Car {
String make;
String model;
String yearMade;
bool hasABS;
Car(this.make, this.model, this.yearMade, this.hasABS);
}
Utilizando parâmetros com nome na chamada do construtor:
class Person {
String name;
int age;
Person({this.name, this.age});
}
var p1 = Person(name: "Eduardo", age: 31)
Construtor com valor opcional:
class Person {
String name;
int age;
Person({this.name, this.age = 30});
}
var p2 = Person(name: "Eduardo")
Iniciando variáveis “final” no constutor:
class Person {
late final String name;
Person() {
name = "Eduardo";
}
}
Factories, podem ser utilizadas quando não necessariamente você precisa de um construtor para a classe.
class Car {
String make;
String model;
String yearMade;
bool hasABS;
factory Car.ford(String model, String yearMade, bool hasABS) {
return FordCar(model, yearMade, hasABS);
}
}
class FordCar extends Car {
FordCar(String model, String yearMade, bool hasABS): super("Ford", model, yearMade, hasABS);
}
Construtores com constante podem ser utilizados quando o seu objeto nunca vai mudar de valor
class FordFocus {
static const FordFocus fordFocus = FordFocus("Ford", "Focus", "2013", true);
final String make;
final String model;
final String yearMade;
final bool hasABS;
const FordFocus(this.make, this.model, this.yearMade, this.hasABS);
}
É possível um construtor chamar outro construtor, da seguinte forma:
class Car {
String make;
String model;
String yearMade;
bool hasABS;
Car(this.make, this.model, this.yearMade, this.hasABS);
Car.withoutABS(this.make, this.model, this.yearMade): this(make, model, yearMade, false);
}
//TODO: Complementar
int sum(int x, int y) {
return x + y;
}
int result = sum(2, 3);
//TODO: Complementar
StringBuffers (para construir Strings de forma mais eficiente):
var moreShakespeare = StringBuffer();
moreShakespeare.write('And all the men and women ');
moreShakespeare.write('merely players; ...');
//TODO: Complementar
//TODO: Complementar
//TODO: Complementar
//TODO: Complementar
//TODO: Complementar
//TODO: Complementar
//TODO: Complementar
//TODO: Complementar
//TODO: Complementar
try {
// Lógia da aplicação
}
on Exception1 {
// tratamento para a exceção 1
}
catch Exception2 {
// tratamento para a exceção 2
}
finally {
// código sempre executado
}
var input = 'abc';
try {
var value = int.parse(input);
} on FormatException {
print('Valor é inválido');
} on Exception catch (ex) {
print('Exception error: $ex');
}
IMPORTANTE: Nem todo erro é uma exception, então, nem sempre vai cair no bloco “Exception”.
try {
throw Exception('Cai no catch Exception');
} on Exception catch (ex) {
print('Exception error: $ex');
}
try {
throw 'Não cai no catch Exception';
} on Exception catch (ex) {
print('Exception error: $ex');
}
Para capturar todos os tipos de erros, utilize:
try {
throw 'Erro';
} catch (error) {
print('Error: $error');
}
–
Para medir o tempo de execução de um código é possível utilizar o Stopwatch
Referência: https://api.dart.dev/stable/2.14.0/dart-core/Stopwatch-class.html
Métodos:
Exemplo:
var stopwatch = Stopwatch();
sleep(new Duration(seconds: 1));
print(stopwatch.elapsedMilliseconds); // 0
s.start();
sleep(new Duration(seconds: 2));
print(s.isRunning); // true
print(stopwatch.elapsedMilliseconds); // around 2000ms
sleep(new Duration(seconds: 1));
s.stop();
print(s.elapsedMilliseconds); // around 3000ms
print(stopwatch.isRunning); // false
sleep(new Duration(seconds: 1));
print(stopwatch.elapsedMilliseconds); // around 3000ms
s.reset();
print(stopwatch.elapsedMilliseconds); // 0
Dica: Para criar e já iniciar o Stopwatch é possível utilizar:
var stopwatch = Stopwatch()..start();