Estou tentando adicionar uma lista de temas que o usuário pode escolher, aqui está minha lista
import 'package:flutter/material.dart';
class ThemeModel {
final Color surface;
final Color primary;
final Color secondary;
final Color onSurface;
ThemeModel({
required this.surface,
required this.primary,
required this.secondary,
required this.onSurface,
});
}
final List<ThemeModel> themes = [
ThemeModel(
surface: Color(0xFFF0EAD6),
primary: Color(0xFF6C9A8B),
secondary: Color(0xFFA67C52),
onSurface: Color(0xFF3B3A36),
),
ThemeModel(
surface: Color(0xFFF5F5F5),
primary: Color(0xFF6D6875),
secondary: Color(0xFFFFB4A2),
onSurface: Color(0xFF2D2D2D),
),
ThemeModel(
surface: Color(0xFFF0F8FF),
primary: Color(0xFFA2C7E5),
secondary: Color(0xFF89B0AE),
onSurface: Color(0xFF2F3E46),
),
];
Vou mostrar uma lista e eles podem escolher uma que salvará um número como chosenTheme agora eu tenho um ThemeData como este
ThemeData myTheme = ThemeData(
fontFamily: 'estedad',
useMaterial3: true,
//brightness: chosenTheme <= 2 ? Brightness.light : Brightness.dark,
colorScheme:
chosenTheme <= 2
? ColorScheme.light(
surface: cards[chosenTheme].themes.surface,
primary: cards[chosenTheme].themes.primary,
secondary: cards[chosenTheme].themes.secondary,
onSurface: cards[chosenTheme].themes.onSurface,
)
: ColorScheme.dark(
surface: cards[chosenTheme].themes.surface,
primary: cards[chosenTheme].themes.primary,
secondary: cards[chosenTheme].themes.secondary,
onSurface: cards[chosenTheme].themes.onSurface,
),
);
como posso definir isso como tema padrão de aplicativos em um provedor de temas?
Criar uma
ThemeProvider
classe:Use
ThemeProvider
o Consumer dentroMyApp
do Widget e forneça themeData paraMaterialApp
:Crie uma lista para atualizar o tema selecionado:
Agora, sempre que o tema for atualizado pelo usuário, a árvore de widgets será atualizada com os novos dados do tema. Use
SharedPreferences
para persistir o tema escolhido emThemeProvider
.