Cómo simular indefinido en Dart
En JS, hay undefined y null. Indefinido significa "sin valor", nulo significa "valor equivalente al vacío". Sin embargo, en Dart (y posiblemente en otros idiomas, no lo sé, pero ahora estoy usando Dart), no hay indefinido, solo nulo. Por tanto, es imposible distinguir entre un valor equivalente al vacío y la ausencia de valor.
¿Existe una forma estándar de simular esta diferencia en Dart?
Respuestas
No. El nullvalor (de tipo Null) es el único valor incorporado que representa la ausencia de un valor. No distingue por qué el valor está ausente.
También es (casi) el único tipo que puede combinar con otro tipo directamente en el sistema de tipos. Con seguridad nula, podrá escribir int?para int-o- Null.
Si desea otro marcador para ausencia, puede usar (o escribir) un Optiontipo como:
abstract class Option<T> {
final T value;
bool get hasValue => true;
Option(this.value);
factory Option.none() => const _OptionNone();
}
class _OptionNone implements Option<Never> {
const _OptionNone();
bool get hasValue => false;
T get value => throw UnsupportedError("None option has no value");
}
Entonces puede representar valor o ningún valor. (Existen implementaciones de dicha clase, por ejemplo, en el paquete quiver ).