Par défaut, toutes les variables sont de type dynamic.
Elles peuvent donc, techniquement, contenir tous types de données.
A contrario, var est un mot-clé utilisé, le type de la donnée déclarée.
dynamic et var ont en quelque sorte le même rôle, cependant ce dernier a des limites - il ne peut être utilisé qu'au sein d'une assignation comme celle-ci:
var my_awesome_variable = 0; //assignation
Vous ne pouvez donc pas faire ceci:
Map my_map = <String, var>{"Hello":"world"}; //Error ! :(
//Cette map doit obligatoirement recevoir une chaîne de caractères
//en tant que clé, mais peut accueillir n'importe quel type de données en tant que valeur
Vous serez alors contraint d'utiliser le type dynamic:
var my_map; //assignation
my_map = <String, dynamic>{"Hello":111}; //It works ! :)
Vous pouvez également retrouver des informations à propos du type dynamic
ici.