Expresiones switch
Parte de la sección Diseños que se adaptan del Journey de Flutter de Coddy. Lección 20 de 30.
Un switch que solo selecciona un valor puede escribirse de forma más breve como una expresión switch. Devuelve un valor que guardas directamente:
final columns = switch (type) {
ScreenType.phone => 2,
ScreenType.tablet => 4,
};Cada línea contiene un valor de la enumeración, una flecha => y el resultado correspondiente, y termina con una coma. No hay ningún case ni asignación, y todo el switch termina con ; porque es una sola instrucción.
Una expresión switch debe tener una respuesta para cada valor. Añade un valor a la enumeración y cualquier switch sobre ella que no tenga una línea para ese valor dejará de compilar, con un error que señala el caso que falta. Dart te muestra cada lugar que debes actualizar.
Desafío
IntermedioAñade un diseño para escritorio a la galería:
- añade
desktopaenum ScreenType - establece
typeenScreenType.desktopcuando el ancho sea1000o más - reemplaza la instrucción
switchpor una expresión switch que proporcione 2, 4 y 6 columnas
Pruébalo tú mismo
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
enum ScreenType { phone, tablet }
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
final width = MediaQuery.of(context).size.width;
var type = ScreenType.phone;
if (width >= 600) {
type = ScreenType.tablet;
}
int columns;
switch (type) {
case ScreenType.phone:
columns = 2;
case ScreenType.tablet:
columns = 4;
}
final photos = ['Beach', 'Forest', 'City', 'Desert', 'Lake', 'Snow', 'Island', 'Canyon'];
return Scaffold(
appBar: AppBar(title: Text('Gallery: ${type.name}')),
body: GridView.count(
crossAxisCount: columns,
children: [
for (final photo in photos)
Container(
margin: const EdgeInsets.all(4),
color: Colors.cyan.shade100,
child: Center(child: Text(photo)),
),
],
),
);
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Diseños que se adaptan
1Compartir una fila
Expanded ocupa toda la filaCompartir espacio con flexFlexible se ajusta a su hijoSpacer separa los elementos4Tamaños y puntos de ruptura
Ancho completo: double.infinityUn ancho máximoTamaño de pantalla: MediaQueryPuntos de ruptura con LayoutBuilder2El error de desbordamiento
El error de desbordamientoSolución al desbordamiento: expandirSolución al desbordamiento: desplazamientoSolución al desbordamiento: ajustarEspaciado dentro de un ajuste5Enumeraciones y switch
Enumeraciones para tipos de pantallaUsar switch con una enumeraciónExpresiones switchPractica por tu cuenta: Compilador de Flutter online