Resolución de errores con temas: const MaterialApp y problemas al reconocer clases de tema
Al comenzar a estructurar temas personalizados en Flutter y conectarlos a MaterialApp, suelen presentarse dos errores muy característicos: conflictos con la palabra clave const e identificadores no encontrados al hacer referencia a la clase de tema. A continuación se analiza el origen de cada fallo y su resolución paso a paso:
Error 1: Invalid constant value al declarar const MaterialApp(...)
Sección titulada «Error 1: Invalid constant value al declarar const MaterialApp(...)»return const MaterialApp( // Error: const aquí exige que todos los parámetros sean constantes de compilación theme: MiTema.lightTheme, // Error: ThemeData no es constante de compilación home: PantallaPrincipal(), // Pantalla asignada); // Fin de MaterialAppCausa: La clase ThemeData generada por Flutter (o por constructores como ColorScheme.fromSeed) es un objeto complejo que se construye y calcula dinámicamente en tiempo de ejecución (no es una constante estricta de tiempo de compilación). Al colocar la palabra reservada const delante de MaterialApp, Dart exige de forma rigurosa que todos y cada uno de los parámetros del widget sean constantes inmutables conocidas antes de la ejecución.
Solución: Retira la palabra clave const de la llamada a MaterialApp:
return MaterialApp( // Correcto: sin const para admitir temas generados dinámicamente theme: MiTema.lightTheme, // Asigna el tema calculado por MiTema home: const PantallaPrincipal(), // El modificador const se traslada al widget hijo estático); // Fin de MaterialAppError 2: Undefined name 'AppTheme' o 'MiTema'
Sección titulada «Error 2: Undefined name 'AppTheme' o 'MiTema'»Causa: A diferencia de Android Studio con Jetpack Compose donde suele existir una plantilla autogenerada llamada AppTheme, en Flutter no existe ninguna clase nativa llamada AppTheme ni MiTema en el SDK oficial. Se trata siempre de una clase personalizada creada por el desarrollador.
Solución: Asegúrate de haber importado el archivo donde definiste tu clase de estilos. Si tu archivo de tema reside en lib/themes/mi_tema.dart y tu main.dart se ubica en la raíz de lib/, debes incluir la correspondiente sentencia de importación en la cabecera:
import 'themes/mi_tema.dart'; // Importa la clase personalizada que contiene la definición del tema