El sistema de tipos de Dart es seguro (sólido) a veces denominado sound typing porque realiza una verificación de tipos (en compilación y en ejecución) garantizando la coincidencia de tipos de las expresiones:

  1. Declaración de inicialización,
  2. El tipo de retorno de un método,
  3. Etc....

El analizador puede inferir el tipo de las Variables y los Métodos; pero cuando no tiene suficiente información para inferir un tipo específico, usa el tipo dynamic.

Null Safety

Verificación de valores NULL

Sound typing de Dart por si solo no puede garantizar que una variable (o un valor de retorno) no sea NULL.

Los errores por valores NULL son tan comunes que las referencias nulas se han denominado el error del billón de dólares.

  • Tony Hoare, inventor de la referencia nula
Dart 2.9 introdujo Sound Null Safety como un mecanismo de verificación de valores NULL
warning:
  1. Ahora todos los tipos de Dart no admiten valores NULL de forma predeterminada y deben inicializarse con valores que no sean NULL, a menos que sean late:
int edad = 42;
late int estatura; // OK, pero puede resultar en errores en tiempo de ejecución nada obvios

Como resultado, las comprobaciones NULL en tiempo de ejecución ya no son necesarias:

if (value == null) {
return 0;
}

A veces necesitamos trabajar con APIs, con las que no podemos garantizar que devuelvan un valor que no sea NULL. Al hacer esto, Podemos usar el operador de aserción ! para asignar un valor posiblemente NULL a una variable no anulable.

int age = yourAge("Irving")!;
  1. Pero hay formas de declarar variables anulables (que aceptan valores NULL):
int? maybeValue;

La palabra clave late

Use late para inicializar una variable cuando se lee por primera vez, en lugar de cuando se crea.

Es común usar late en combinación con final.

Clases

Si una variable de instancia que no acepta valores NULL no se puede inicializar con un valor predeterminado, configúrelo con un constructor:

class BaseUrl {
   BaseUrl(this.hostName);
   String hostName; // Ahora es valido
   int port = 80; // OK
}

Consejos

  1. Cada vez que declare una variable en Dart, piense si debería ser null o no.
  2. Cuando cree una función, especifique el tipo de retorno.

Dart Null Safety: una guía para los tipos que no aceptan valores nulos | by Jaime Hernández | Medium