es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Flutter: Mover el tema (ThemeData) a un archivo separado.

Estoy empezando un nuevo proyecto en Flutter y soy completamente nuevo en ello.

¿Cuál es la convención para definir temas en Flutter?

Me gustaría tener un archivo separado con un tema para mantener el main.dart simple. ¿Existe alguna manera buena/correcta/clásica de hacerlo?

Actualmente, mi main.dart se ve así:

void main() => runApp(MaterialApp(
      initialRoute: '/',
      theme: ThemeData(
          appBarTheme: AppBarTheme(
            color: Colors.teal,
          ),
          textButtonTheme: TextButtonThemeData(
              style: TextButton.styleFrom(
            primary: Colors.teal,
          )),
          scaffoldBackgroundColor: Colors.grey[200],
          textTheme: TextTheme(
            bodyText1: TextStyle(),
            bodyText2: TextStyle(),
          ).apply(
            bodyColor: Colors.teal[800],
          )),
      routes: {
        '/': (context) => Loading(),
        '/home': (context) => Home(),
        '/alarms': (context) => SetUpAlarm(),
      },
    ));
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En Flutter, la definición de temas se basa principalmente en la clase ThemeData. Es una práctica común extraer ThemeData en un archivo separado llamado theme.dart e importarlo al archivo main.dart. Esto no solo mantiene el código limpio y modular, sino que también facilita la gestión y personalización del tema.

    Para definir un tema personalizado en un archivo separado, sigue estos pasos:

    1. Crea un nuevo archivo llamado theme.dart en la carpeta lib de tu proyecto.
    2. Importa las librerías necesarias en la parte superior del archivo:
      import 'package:flutter/material.dart';
      
    3. Define tu propia clase ThemeData en el mismo archivo:
      final ThemeData miTema = ThemeData(
       appBarTheme: AppBarTheme(color: Colors.teal),
       textButtonTheme: TextButtonThemeData(
         style: TextButton.styleFrom(
           primary: Colors.teal,
         ),
       ),
       scaffoldBackgroundColor: Colors.grey[200],
       textTheme: TextTheme(
         bodyText1: TextStyle(),
         bodyText2: TextStyle(),
       ).apply(
         bodyColor: Colors.teal[800],
       ),
      );
      
    4. Importa el archivo theme.dart en tu archivo main.dart:
      import 'package:my_project/theme.dart';
      
    5. Configura tu widget MaterialApp para usar el tema personalizado:
      void main() => runApp(MaterialApp(
           theme: miTema,
           initialRoute: '/',
           routes: {
             '/': (context) => Loading(),
             '/home': (context) => Home(),
             '/alarms': (context) => SetUpAlarm(),
           },
         ));
      

    Esto te permitirá crear un archivo separado para tu ThemeData mientras mantienes tu archivo main.dart simple y fácil de gestionar.

Comments are closed.