Olá, Nataly, como vai?
No Dart, é possível declarar variáveis tanto de forma explícita, indicando o tipo (como String, int, double), quanto de forma implícita, utilizando var. A diferença é que, com var, o Dart infere automaticamente o tipo com base no valor atribuído. Por exemplo:
var nome = "Nataly"; // O compilador entende que é uma String
String nome = "Nataly"; // Tipo explicitamente declarado
As duas formas são corretas, mas quando usamos var, o tipo ainda é definido e não pode ser alterado depois. Ou seja, se você escrever var nome = "Nataly";, não conseguirá atribuir um número a essa variável depois, pois o Dart é, sim, uma linguagem fortemente tipada.
Já o uso de String? indica que a variável pode receber um valor nulo (null). Esse comportamento faz parte do sistema de null safety do Dart. Por exemplo:
String? nome; // Pode ser nulo
nome = null; // Permitido
Enquanto isso, uma variável String nome; sem o ponto de interrogação não pode receber null.
Espero ter ajudado.
Siga firme nos seus estudos e conte com o fórum sempre que precisar.
Abraços :)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado