BottomSheet modal en Flutter: ejercicio resuelto
BottomSheet modal en Flutter: ejercicio resuelto
showModalBottomSheet es la forma estándar de mostrar paneles temporales desde la parte inferior: filtros, acciones contextuales, confirmaciones, selección de opciones. Es más natural en móvil que un AlertDialog centrado cuando la acción está relacionada con una lista o contenido debajo.
Enunciado
Implementa tres variantes de BottomSheet:
- BottomSheet básico: lista de acciones (compartir, editar, eliminar).
- BottomSheet con formulario: panel de filtros con switches y aplicar/cancelar.
- DraggableScrollableSheet: panel arrastrable con lista larga de ítems.
Dependencias
Solo Flutter SDK.
Solución: BottomSheet de acciones
Solución: BottomSheet de filtros con formulario
Solución: DraggableScrollableSheet
Pantalla principal
Errores frecuentes
isScrollControlled: falsecon formulario: el sheet tiene altura fija y el teclado lo tapa. Usa siempreisScrollControlled: truecuando haya campos de texto.DraggableScrollableSheetsin pasarscrollControlleralListView: el drag y el scroll entran en conflicto. Pasa siempre el controller del builder.- Cerrar el sheet con
Navigator.pop(context)pasando un valor: el tipo del valor debe coincidir con el genéricoshowModalBottomSheet<T>, si no el resultado esnull.
Aplicación práctica
Filtros de búsqueda, menús de acciones contextuales, confirmación de eliminación, selección de imagen/archivo, pago en carrito — cualquier flujo secundario que no merece una ruta completa.
Siguiente ejercicio recomendado
- Animaciones implícitas en Flutter: ejercicio resuelto
- go_router con guards en Flutter: ejercicio resuelto
- Formulario con validación en Flutter: ejercicio resuelto
- Todos los ejercicios de Flutter
Práctica guiada y siguiente paso
- Más ejercicios de Flutter
- Ejercicios C para reforzar fundamentos
- Programación en C en 100 ejercicios resueltos
- Ver el libro en Amazon (incluido en Kindle Unlimited)
- Suscribirte a la newsletter
FAQ
¿Cómo evito que el sheet se cierre al pulsar fuera?
Pasa isDismissible: false a showModalBottomSheet. Útil para confirmaciones críticas o formularios con datos no guardados.
¿Puedo abrir un BottomSheet desde otro BottomSheet?
Técnicamente sí, pero la UX es confusa. En su lugar usa un Navigator.push dentro del sheet para ir a una pantalla completa si necesitas más profundidad.
¿Qué diferencia hay entre BottomSheet modal y persistente?
El modal bloquea la interacción con el resto de la pantalla (showModalBottomSheet). El persistente convive con la pantalla debajo (Scaffold.showBottomSheet). Para la mayoría de casos, el modal es la elección correcta.