Aleteo – Temas

Los temas son una parte integral de la interfaz de usuario para cualquier aplicación. Los temas se utilizan para diseñar las fuentes y los colores de una aplicación para hacerla más presentable. En Flutter, el widget Theme se usa para agregar temas a una aplicación. Uno puede usarlo para una parte particular de la aplicación, como los botones y la barra de navegación, o definirlo en la raíz de la aplicación para usarlo en toda la aplicación.

Constructor de la clase Theme:

const Theme(
{Key? key,
required ThemeData data,
bool isMaterialAppTheme: false,
required Widget child}
)

Propiedades del widget de tema:

  • child: la propiedad child toma un widget como el objeto que se muestra debajo del widget Theme en el árbol de widgets.
  • data: Esta propiedad toma la clase ThemeData como objeto para especificar el estilo, los colores y la tipografía a utilizar.
  • isMarerialAppTheme: Esta propiedad toma un booleano (final) como objeto. Si se establece en verdadero, entonces el tema usa el diseño del material.

En este artículo, analizaremos el mismo widget en detalle creando una aplicación simple con el widget de tema. Para hacerlo, siga los siguientes pasos:

  • crear un tema
  • Crear un contenedor para aplicar el tema.
  • Use el mismo tema en parte de la aplicación (o en toda la aplicación).

Ahora, veamos los pasos anteriores en detalle.

Crear un tema:

Use el widget Tema para crear un tema. En temas, algunas de las propiedades que se pueden usar se dan a continuación:

  • Tema de texto
  • brillo
  • color primario
  • acentuar el color
  • Familia tipográfica

Un tema simple se vería como a continuación:

Dart

MaterialApp(
  title: title,
  theme: ThemeData(
    // UI
    brightness: Brightness.dark,
    primaryColor: Colors.lightBlue[800],
    accentColor: Colors.cyan[600],
 
    // font
    fontFamily: 'Georgia',
    //text style
    textTheme: TextTheme(
      headline1: TextStyle(fontSize: 72.0, fontWeight: FontWeight.bold),
      headline6: TextStyle(fontSize: 36.0, fontStyle: FontStyle.italic),
      bodyText2: TextStyle(fontSize: 14.0, fontFamily: 'Hind'),
    ),
  )
);

Creación de un contenedor:

En Flutter, un contenedor simple se puede definir de la siguiente manera:

Dart

Container(
  color: Theme.of(context).accentColor,
  child: Text(
    'Hello Geeks!',
    style: Theme.of(context).textTheme.headline6,
  ),
);

Aplicando el tema:

Para anular el tema predeterminado de un widget en Flutter, se puede envolver el mismo widget dentro del widget de tema. Se puede crear una instancia de Themedata() y pasarla al widget respectivo como se muestra a continuación:

Dart

Theme(
  data: ThemeData(
    accentColor: Colors.yellow,
  ),
  child: FloatingActionButton(
    onPressed: () {},
    child: Icon(Icons.add),
  ),
);

Puede extender el mismo tema a toda la aplicación usando el método copyWith() como se muestra a continuación:

Dart

Theme(
  data: Theme.of(context).copyWith(accentColor: Colors.yellow),
  child: FloatingActionButton(
    onPressed: null,
    child: Icon(Icons.add),
  ),
);

Código fuente completo:

Dart

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
 
void main() {
  runApp(MyApp());
}
 
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final appName = 'GeeksForGeeks';
 
    return MaterialApp(
      title: appName,
      theme: ThemeData(
        brightness: Brightness.light,
        primaryColor: Colors.green,
        accentColor: Colors.deepOrangeAccent,
        fontFamily: 'Georgia',
 
        //text styling
        textTheme: TextTheme(
          headline1: TextStyle(fontSize: 72.0, fontWeight: FontWeight.bold),
          headline6: TextStyle(fontSize: 36.0, fontStyle: FontStyle.italic),
          bodyText2: TextStyle(fontSize: 14.0, fontFamily: 'Hind'),
        ),
      ),
      home: MyHomePage(
        title: appName,
      ),
    );
  }
}
 
class MyHomePage extends StatelessWidget {
  final String title;
 
  MyHomePage({Key key, @required this.title}) : super(key: key);
 
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Container(
          color: Theme.of(context).accentColor,
          child: Text(
            'Hello Geeks!',
            style: Theme.of(context).textTheme.headline6,
          ),
        ),
      ),
      floatingActionButton: Theme(
        data: Theme.of(context).copyWith(
          colorScheme:
          Theme.of(context).colorScheme.copyWith(secondary: Colors.red),
        ),
        child: FloatingActionButton(
          onPressed: null,
          child: Icon(Icons.arrow_circle_up),
        ),
      ),
    );
  }
}

Producción:

themes in flutter

Publicación traducida automáticamente

Artículo escrito por ddeevviissaavviittaa y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *