Oi Rafael, então... Sua pergunta é bastante pertinente. A maneira """""correta""""" de se programar em Dart é tipando as coisas. Quanto mais tipamos mais performático o nosso código se torna. Como Dart é uma linguagem moderna e tem uma pegada de querer agradar ao público javascript, temos a opção var que o interpretador lê o primeiro valor que entrar nela e tipa. Caso tente atribuir um valor de outro tipo ela dará erro por ter o tipo do valor anteriror atribuído.
Já o tipo de variável dynamic faz o papel de ser uma variável completamente dinâmica que aceita a qualquer momento tipos diferentes. Vale lembrar que o dynamic apesar de permitir flexibilidade é um tipo. Var também é um tipo por baixo dos panos. E assim vai, portanto, dart é fortemente tipada. Mas, esses conceitos realmente abrem brechas para dúvida.
Linguagens fortemente tipadas são linguagens que exigem que, na declaração de variáveis/funções, você já forneça o tipo desta variável/retorno da função.
Em JavaScript, que não é fortemente tipado, você pode simplesmente declarar uma variável assim:
var nome = "Maycon";
Aqui você não disse que a variável nome é uma String, e mesmo assim o código irá executar. Já em Java, que é uma linguagem fortemente tipada, você é obrigado a informar o tipo da variável:
String sobrenome = "Souza" ;
Caso você não identifique que a variável sobrenome é uma String, o código nem irá compilar.
Em ambos os casos você tem benefícios e desvantagens. Quando a linguagem é fortemente tipada, é mais fácil identifcar erros no código, e fica mais legível para outro programador ler. Já quando não é tipada, se você é um programador mais experiente, talvez consiga codificar e produzir mais rápido.
No fundo, é questão de gosto/costume. É possível fazer bons e péssimos códigos em ambos os casos.
Espero ter ajudado.
Um forte abraço e bom estudo!