Adición de 'linux' y 'windows' al enum TargetPlatform
Se añadieron dos nuevos valores al enum TargetPlatform que podrían requerir casos adicionales en las sentencias switch que evalúan un TargetPlatform.
Resumen
#Se añadieron dos nuevos valores al enum TargetPlatform
que podrían requerir casos adicionales en las sentencias switch que
evalúan un TargetPlatform y no incluyen un caso default:.
Contexto
#Antes de este cambio, el enum TargetPlatform solo contenía cuatro valores
y estaba definido de esta manera:
enum TargetPlatform {
android,
fuchsia,
iOS,
macOS,
}
Una sentencia switch solo necesitaba manejar estos casos,
y las aplicaciones de escritorio que querían ejecutarse en Linux o
Windows generalmente tenían una prueba como esta en su método
main():
// Sets a platform override for desktop to avoid exceptions. See
// https://docs.flutter.dev/desktop#target-platform-override for more info.
void _enablePlatformOverrideForDesktop() {
if (!kIsWeb && (Platform.isWindows || Platform.isLinux)) {
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
}
}
void main() {
_enablePlatformOverrideForDesktop();
runApp(MyApp());
}
Descripción del cambio
#El enum TargetPlatform ahora está definido como:
enum TargetPlatform {
android,
fuchsia,
iOS,
linux, // new value
macOS,
windows, // new value
}
Y la configuración de prueba de plataforma
debugDefaultTargetPlatformOverride
en main()
ya no es necesaria en Linux y Windows.
Esto puede hacer que el analizador de Dart muestre la advertencia
missing_enum_constant_in_switch para
las sentencias switch que no incluyan un caso default.
Escribir un switch sin un caso default: es la
forma recomendada de manejar enums, ya que el analizador
puede ayudarte a encontrar cualquier caso que no esté manejado.
Guía de migración
#Para migrar al nuevo enum y evitar el error
missing_enum_constant_in_switch del analizador, que se ve así:
warning: Missing case clause for 'linux'. (missing_enum_constant_in_switch at [package] path/to/file.dart:111)
o:
warning: Missing case clause for 'windows'. (missing_enum_constant_in_switch at [package] path/to/file.dart:111)
Modifica tu código de la siguiente manera:
Código antes de la migración:
void dance(TargetPlatform platform) {
switch (platform) {
case TargetPlatform.android:
// Do Android dance.
break;
case TargetPlatform.fuchsia:
// Do Fuchsia dance.
break;
case TargetPlatform.iOS:
// Do iOS dance.
break;
case TargetPlatform.macOS:
// Do macOS dance.
break;
}
}
Código después de la migración:
void dance(TargetPlatform platform) {
switch (platform) {
case TargetPlatform.android:
// Do Android dance.
break;
case TargetPlatform.fuchsia:
// Do Fuchsia dance.
break;
case TargetPlatform.iOS:
// Do iOS dance.
break;
case TargetPlatform.linux: // new case
// Do Linux dance.
break;
case TargetPlatform.macOS:
// Do macOS dance.
break;
case TargetPlatform.windows: // new case
// Do Windows dance.
break;
}
}
No se recomienda tener casos default: en estas sentencias switch,
porque de lo contrario el analizador no podrá ayudarte a encontrar
todos los casos que deben ser manejados.
Además, cualquier prueba como la mencionada anteriormente que configure
debugDefaultTargetPlatformOverride ya no es necesaria
para aplicaciones de Linux y Windows.
Timeline
#Introducido en la versión: 1.15.4
En la versión estable: 1.17
Referencias
#Documentación de la API:
Issues relevantes:
PR relevante:
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.