Вы можете указать ThemeData
на MaterialApp(theme:
, это будет отражать дерево виджетов.
void main() {
runApp(name());
}
enum AppTheme {
LightTheme(),
DarkTheme,
CustomTheme;
}
extension AppThemeData on AppTheme {
get data {
switch (this) {
case AppTheme.DarkTheme:
return ThemeData.dark();
case AppTheme.CustomTheme:
return ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSwatch().copyWith(
secondary: Colors.deepPurple,
),
);
case AppTheme.LightTheme:
default:
return ThemeData.light();
}
}
}
class name extends StatefulWidget {
const name({super.key});
@override
State<name> createState() => _nameState();
}
// You may use some sort of state-management solution like riverpod/bloc on project level
class _nameState extends State<name> {
AppTheme theme = AppTheme.LightTheme;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
theme: theme.data,
home: Scaffold(
appBar: AppBar(
title: Text("test"),
),
body: Column(
children: [
Text("test"),
for (final value in AppTheme.values)
ElevatedButton(
onPressed: () {
setState(() {
theme = value;
});
},
child: Text(value.name),
)
],
),
),
);
}
}
Не могли бы вы показать мне, как добавить эту функцию в другой файл/страницу? Я разместил новый вопрос здесь stackoverflow.com/questions/76111375/…
Отвечает ли это на ваш вопрос? Как реализовать Dark Mode и Light Mode во флаттере?