File tree Expand file tree Collapse file tree 8 files changed +75
-3
lines changed Expand file tree Collapse file tree 8 files changed +75
-3
lines changed Original file line number Diff line number Diff line change 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 number Diff line number Diff line change 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 number Diff line number Diff line change 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 number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 11import 'package:flutter/material.dart' ;
22import 'package:get/get.dart' ;
3+ import 'common/theme/theme-switcher.helper.dart' ;
34import 'screens/home/home.binding.dart' ;
45import '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}
Original file line number Diff line number Diff line change 11import 'package:get/get.dart' ;
2+ import '../../common/theme-switcher/theme-switcher.controller.dart' ;
23import 'todo/add-task/add-task.controller.dart' ;
34import 'todo/filter-panel/filter-panel.controller.dart' ;
45import '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 ()));
Original file line number Diff line number Diff line change 11import 'package:flutter/material.dart' ;
2+ import '../../common/theme-switcher/theme-switcher.widget.dart' ;
23import 'todo/todo.widget.dart' ;
34import '../home/title/title.widget.dart' ;
45
56class 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 ),
Original file line number Diff line number Diff 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 ),
You can’t perform that action at this time.
0 commit comments