Cambiar tema a un widget

En ocasiones nos puede interesar que un widget en particular tenga un diseño diferente al tema global de la aplicación, que es el predeterminado para todos los widgets.

En ese caso, podemos envolver el widget en cuestión en un widget Theme para aislarlo del ThemeData de la aplicación.

Lo hacemos desde la propiedad data de Theme, ya sea sobrescribiendo ThemeData, o bien (quizá mejor) creando una copia o extensión del tema principal de la aplicación para reemplazar solo las propiedades que se necesitan cambiar (heredando el resto de propiedades).

Theme(
    // sobreescribir con ThemeData
    data: ThemeData(cardColor: Colors.deepOrange),
    child: Card(
        child: Text('Unique ThemeData'),
    ),
),
Theme(
    // extender con copyWith
    data: Theme.of(context).copyWith(cardColor: Colors.deepOrange),
    child: Card(
        child: Text('copyWith Theme'),
    ),
),

Más información en Usar Themes para compartir colores y estilos de fuente.