Flutter sofre algumas críticas pelo fato de utilizar Dart, mas é graças à ela que ele se torna um framework único, tanto para o desenvolvedor quanto para o usuário final. O desenvolvedor tem uma incrível experiência e o usuário final tem um aplicativo nativo, de alta performance.
Caso você já possua experiência com qualquer linguagem C-style, irá perceber que Dart é muito amigável e não terá dificuldades em aprende-la.
Recomendo o estudo deste guia, aqueles que gostam de se familiarizar com a linguagem antes de aprender o framework. Particularmente, não vejo necessidade de se aprofundar para começar. O conhecimento básico, proporcionado pelo guia, é suficiente para dar os primeiros passos e sentir deliciosa experiência de construir um aplicativo bacana.
À medida que avançarmos com o conteúdo, você irá aprender Dart aos poucos, não se preocupe.
Algumas características da linguagem:
Tipada, porém isto é opcional.
Morderna (generics<T>, funções, interfaces e mixins).
High Order Functions ( forEach(), map(), etc ).
Utiliza sintáxe C-style (como C#, Javascript).
Pode ser compilada e interpretada.
Tipos suportados:
numbers
strings
boolean
list
set
map
rune ( representar UNICODE caracteres como string)
symbols
void main() {print('Olá, Mundo!');}
var name = 'Voyager I';var year = 1977;var antennaDiameter = 3.7;var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];var image = {'tags': ['saturn'],'url': '//path/to/saturn.jpg'};
String name = 'Voyager I';int year = 1977;double antennaDiameter = 3.7;List<String> flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];Map<String, String> image = {'tags': ['saturn'],'url': '//path/to/saturn.jpg'};
Sobre a tipagem opcional, gostaria de reforçar o seguinte ponto:
//declaração explícita do tipo da variável (String)String name = 'Voyager I';//declaração de variável sem especificar seu tipovar name = 'Voyager I';
if (year >= 2001) {print('21st century');} else if (year >= 1901) {print('20th century');}for (var object in flybyObjects) {print(object);}for (int month = 1; month <= 12; month++) {print(month);}while (year < 2016) {year += 1;}
int fibonacci(int n) {if (n == 0 || n == 1) return n;return fibonacci(n - 1) + fibonacci(n - 2);}var result = fibonacci(20);
try {for (var 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();}