2022-09-07 08:30:09 +00:00
|
|
|
// @dart=2.9
|
|
|
|
|
2022-03-09 05:57:27 +00:00
|
|
|
import 'package:adaptive_theme/adaptive_theme.dart';
|
2022-03-09 02:48:41 +00:00
|
|
|
import 'package:flutter/material.dart';
|
2022-10-04 11:48:12 +00:00
|
|
|
import 'package:intl/intl.dart';
|
2022-10-04 09:26:31 +00:00
|
|
|
import 'package:photos/ente_theme_data.dart';
|
|
|
|
import 'package:photos/ui/components/captioned_text_widget.dart';
|
2022-10-05 11:48:56 +00:00
|
|
|
import 'package:photos/ui/components/expandable_menu_item_widget.dart';
|
2022-10-04 09:26:31 +00:00
|
|
|
import 'package:photos/ui/components/menu_item_widget.dart';
|
|
|
|
import 'package:photos/ui/settings/common_settings.dart';
|
2022-03-09 02:48:41 +00:00
|
|
|
|
2022-07-14 07:41:03 +00:00
|
|
|
class ThemeSwitchWidget extends StatefulWidget {
|
2022-03-09 02:48:41 +00:00
|
|
|
const ThemeSwitchWidget({Key key}) : super(key: key);
|
|
|
|
|
2022-07-14 07:41:03 +00:00
|
|
|
@override
|
|
|
|
State<ThemeSwitchWidget> createState() => _ThemeSwitchWidgetState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _ThemeSwitchWidgetState extends State<ThemeSwitchWidget> {
|
2022-10-04 11:48:12 +00:00
|
|
|
AdaptiveThemeMode currentThemeMode;
|
2022-10-04 09:26:31 +00:00
|
|
|
|
2022-07-14 07:41:03 +00:00
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
super.initState();
|
|
|
|
AdaptiveTheme.getThemeMode().then(
|
|
|
|
(value) {
|
2022-10-04 11:48:12 +00:00
|
|
|
currentThemeMode = value ?? AdaptiveThemeMode.system;
|
2022-07-14 07:41:03 +00:00
|
|
|
debugPrint('theme value $value');
|
|
|
|
if (mounted) {
|
|
|
|
setState(() => {});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-10-04 09:26:31 +00:00
|
|
|
@override
|
|
|
|
void dispose() {
|
|
|
|
super.dispose();
|
|
|
|
}
|
|
|
|
|
2022-03-09 02:48:41 +00:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
2022-10-05 11:48:56 +00:00
|
|
|
return ExpandableMenuItemWidget(
|
|
|
|
title: "Theme",
|
|
|
|
selectionOptionsWidget: _getSectionOptions(context),
|
|
|
|
leadingIcon: Theme.of(context).brightness == Brightness.light
|
|
|
|
? Icons.light_mode_outlined
|
|
|
|
: Icons.dark_mode_outlined,
|
2022-10-04 09:26:31 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Widget _getSectionOptions(BuildContext context) {
|
|
|
|
return Column(
|
|
|
|
children: [
|
2022-10-05 07:52:48 +00:00
|
|
|
sectionOptionSpacing,
|
2022-10-04 11:48:12 +00:00
|
|
|
_menuItem(context, AdaptiveThemeMode.light),
|
2022-10-05 07:52:48 +00:00
|
|
|
sectionOptionSpacing,
|
2022-10-04 11:48:12 +00:00
|
|
|
_menuItem(context, AdaptiveThemeMode.dark),
|
2022-10-05 07:52:48 +00:00
|
|
|
sectionOptionSpacing,
|
2022-10-04 11:48:12 +00:00
|
|
|
_menuItem(context, AdaptiveThemeMode.system),
|
2022-10-05 07:52:48 +00:00
|
|
|
sectionOptionSpacing,
|
2022-10-04 09:26:31 +00:00
|
|
|
],
|
2022-03-09 02:48:41 +00:00
|
|
|
);
|
|
|
|
}
|
2022-10-04 11:48:12 +00:00
|
|
|
|
|
|
|
Widget _menuItem(BuildContext context, AdaptiveThemeMode themeMode) {
|
|
|
|
return MenuItemWidget(
|
|
|
|
captionedTextWidget: CaptionedTextWidget(
|
2022-10-05 13:57:32 +00:00
|
|
|
title: toBeginningOfSentenceCase(themeMode.name),
|
2022-10-04 11:48:12 +00:00
|
|
|
textStyle: Theme.of(context).colorScheme.enteTheme.textTheme.body,
|
|
|
|
),
|
|
|
|
isHeaderOfExpansion: false,
|
|
|
|
trailingIcon: currentThemeMode == themeMode ? Icons.check : null,
|
|
|
|
onTap: () async {
|
|
|
|
AdaptiveTheme.of(context).setThemeMode(themeMode);
|
|
|
|
currentThemeMode = themeMode;
|
|
|
|
if (mounted) {
|
|
|
|
setState(() {});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
2022-03-09 02:48:41 +00:00
|
|
|
}
|