Ir al contenido

Guía de Flutter para novatos - Miguel Páramos

FAQ sobre Flutter pal que no tiene ni idea de Flutter | 2º DAM · PMDM

Ejemplo funcional completo con CupertinoApp (Diseño estilo iOS sin Material)

La alternativa oficial más sólida y utilizada frente a MaterialApp es CupertinoApp, que implementa la guía de diseño de Apple (iOS/macOS Human Interface Guidelines). A continuación se presenta un ejemplo 100% funcional y ejecutable que sustituye toda la jerarquía de Material por componentes de Cupertino.

Código Funcional Completo: main.dart con Cupertino

Sección titulada «Código Funcional Completo: main.dart con Cupertino»
import 'package:flutter/cupertino.dart'; // Importa el catálogo de componentes estilo iOS de Apple
void main() { // Punto de entrada principal de la aplicación
runApp(const MiAppCupertino()); // Arranca la app con el widget raíz de Cupertino
} // Fin de la función main
class MiAppCupertino extends StatelessWidget { // Widget raíz inmutable que define la app
const MiAppCupertino({super.key}); // Constructor constante de la clase principal
@override // Sobreescritura del método build del padre
Widget build(BuildContext context) { // Retorna la estructura de la aplicación
return const CupertinoApp( // Contenedor raíz con estética Cupertino
title: 'Demo Cupertino iOS', // Título de la app en el administrador de tareas
theme: CupertinoThemeData( // Configura el tema global de iOS
brightness: Brightness.light, // Modo claro activo
primaryColor: CupertinoColors.activeBlue, // Color de acento azul característico de iOS
), // Fin de CupertinoThemeData
home: PantallaPrincipalCupertino(), // Pantalla de inicio de la app
); // Fin de CupertinoApp
} // Fin del método build
} // Fin de MiAppCupertino
class PantallaPrincipalCupertino extends StatelessWidget { // Pantalla principal de ejemplo
const PantallaPrincipalCupertino({super.key}); // Constructor constante
@override // Sobreescritura del método build
Widget build(BuildContext context) { // Construye la vista de la pantalla
return CupertinoPageScaffold( // Andamio de pantalla equivalente al Scaffold de Material
navigationBar: const CupertinoNavigationBar( // Barra de navegación superior translúcida
middle: Text('Estilo iOS Nativo'), // Título centrado según el estándar de Apple
), // Fin de CupertinoNavigationBar
child: SafeArea( // Garantiza que el contenido no quede tapado por el notch o barra de inicio
child: Center( // Centra el contenido en pantalla
child: Column( // Disposición vertical de widgets
mainAxisAlignment: MainAxisAlignment.center, // Centra los elementos verticalmente
children: [ // Lista de widgets hijos
const Text( // Texto explicativo
'Aplicación Flutter sin Material Design', // Mensaje mostrado
style: TextStyle(fontSize: 16), // Tamaño de fuente en píxeles lógicos
), // Fin de Text
const SizedBox(height: 24), // Separación vertical de 24 píxeles
CupertinoButton.filled( // Botón con fondo relleno característico de iOS
child: const Text('Abrir Diálogo Cupertino'), // Texto del botón
onPressed: () { // Callback ejecutado al pulsar el botón
showCupertinoDialog( // Dispara un diálogo modal nativo de iOS
context: context, // Contexto necesario para posicionar el modal
builder: (context) => CupertinoAlertDialog( // Cuadro de diálogo con diseño de Apple
title: const Text('Aviso de iOS'), // Título del diálogo
content: const Text( // Mensaje del cuerpo del diálogo
'Este cuadro de diálogo utiliza los estilos y bordes nativos de Apple.', // Texto informativo
), // Fin de Text
actions: [ // Botones de acción del diálogo
CupertinoDialogAction( // Acción interactiva del diálogo
isDefaultAction: true, // Destaca visualmente la acción por defecto
child: const Text('Entendido'), // Texto de confirmación
onPressed: () => Navigator.pop(context), // Cierra el modal emergente
), // Fin de CupertinoDialogAction
], // Fin de lista de acciones
), // Fin de CupertinoAlertDialog
); // Fin de showCupertinoDialog
}, // Fin de onPressed
), // Fin de CupertinoButton.filled
], // Fin de children
), // Fin de Column
), // Fin de Center
), // Fin de SafeArea
); // Fin de CupertinoPageScaffold
} // Fin del método build
} // Fin de PantallaPrincipalCupertino

Tabla de Equivalencias Directas: Material vs. Cupertino

Sección titulada «Tabla de Equivalencias Directas: Material vs. Cupertino»
Concepto de Interfaz Equivalente en Material Design Equivalente en Cupertino (iOS)
Raíz de la aplicación MaterialApp(...) CupertinoApp(...)
Estructura base de pantalla Scaffold(...) CupertinoPageScaffold(...)
Barra de navegación superior AppBar(...) CupertinoNavigationBar(...)
Botón principal ElevatedButton(...) o FilledButton(...) CupertinoButton.filled(...)
Diálogo modal de alerta AlertDialog(...) CupertinoAlertDialog(...)
Indicador de carga circular CircularProgressIndicator() CupertinoActivityIndicator()
Colección de iconos Icons.settings CupertinoIcons.settings