Skip to content

Commit cd58bf7

Browse files
feat(ref: no-ref): add theme
1 parent 27cfa05 commit cd58bf7

8 files changed

+75
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:get/get.dart';
3+
4+
import '../theme/theme-switcher.enum.dart';
5+
import '../theme/theme-switcher.helper.dart';
6+
7+
class ThemeController extends GetxController {
8+
final Rx<ThemeType> currentTheme = ThemeType.light.obs;
9+
10+
void updateTheme(ThemeType theme) {
11+
currentTheme.value = theme;
12+
final ThemeData selectedTheme = theme == ThemeType.light
13+
? ThemeHelper.lightTheme
14+
: ThemeHelper.darkTheme;
15+
Get.changeTheme(selectedTheme);
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:get/get.dart';
3+
import 'theme-switcher.controller.dart';
4+
import '../theme/theme-switcher.enum.dart';
5+
6+
class ThemeSwitcherWidget extends GetView<ThemeController> {
7+
const ThemeSwitcherWidget({super.key});
8+
9+
@override
10+
Widget build(BuildContext context) => Obx(() => DropdownButton<ThemeType>(
11+
value: controller.currentTheme.value,
12+
onChanged: (ThemeType? theme) {
13+
if (theme != null) {
14+
controller.updateTheme(theme);
15+
}
16+
},
17+
items: ThemeType.values
18+
.map<DropdownMenuItem<ThemeType>>(
19+
(ThemeType theme) => DropdownMenuItem<ThemeType>(
20+
value: theme,
21+
child: Text(theme.title),
22+
))
23+
.toList(),
24+
));
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
enum ThemeType {
2+
light('Light Theme'),
3+
dark('Dark Theme');
4+
5+
const ThemeType(this.title);
6+
7+
final String title;
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:flutter/material.dart';
2+
3+
mixin ThemeHelper {
4+
static final ThemeData lightTheme = ThemeData(
5+
brightness: Brightness.light,
6+
scaffoldBackgroundColor: Colors.white,
7+
primaryColor: Colors.white,
8+
);
9+
10+
static final ThemeData darkTheme = ThemeData(
11+
brightness: Brightness.dark,
12+
scaffoldBackgroundColor: Colors.black,
13+
primaryColor: Colors.black,
14+
);
15+
}

lib/main.dart

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:get/get.dart';
3+
import 'common/theme/theme-switcher.helper.dart';
34
import 'screens/home/home.binding.dart';
45
import 'screens/home/home.screen.dart';
56

@@ -14,5 +15,8 @@ class MyApp extends StatelessWidget {
1415
Widget build(BuildContext context) => GetMaterialApp(
1516
initialBinding: HomeBinding(),
1617
home: const HomeScreen(),
18+
theme: ThemeHelper.lightTheme,
19+
darkTheme: ThemeHelper.darkTheme,
20+
themeMode: ThemeMode.light,
1721
);
1822
}

lib/screens/home/home.binding.dart

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:get/get.dart';
2+
import '../../common/theme-switcher/theme-switcher.controller.dart';
23
import 'todo/add-task/add-task.controller.dart';
34
import 'todo/filter-panel/filter-panel.controller.dart';
45
import 'todo/task-list-item/task-list-item.controller.dart';
@@ -9,6 +10,7 @@ class HomeBinding extends Bindings {
910
Future<void> dependencies() async {
1011
Get
1112
..lazyPut(TodoService.new)
13+
..lazyPut(ThemeController.new)
1214
..lazyPut(() => AddTaskController(Get.find()))
1315
..lazyPut(() => FilterPanelController(Get.find()))
1416
..lazyPut(() => TaskListItemController(Get.find(), Get.find()));

lib/screens/home/home.screen.dart

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import 'package:flutter/material.dart';
2+
import '../../common/theme-switcher/theme-switcher.widget.dart';
23
import 'todo/todo.widget.dart';
34
import '../home/title/title.widget.dart';
45

56
class HomeScreen extends StatelessWidget {
67
const HomeScreen({super.key});
8+
79
@override
810
Widget build(BuildContext context) => Scaffold(
9-
backgroundColor: Colors.white,
11+
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
1012
body: ListView(
1113
children: const <Widget>[
1214
Center(child: TitleWidget()),
15+
ThemeSwitcherWidget(),
1316
TodoWidget(),
1417
],
1518
),

lib/screens/home/todo/task-list-item/task-list-item.widget.dart

-2
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ class TaskListItemWidget extends StatelessWidget {
5656
decoration: task.isFinished.value
5757
? TextDecoration.lineThrough
5858
: null,
59-
color:
60-
task.isFinished.value ? Colors.grey : Colors.black,
6159
),
6260
),
6361
),

0 commit comments

Comments
 (0)