File tree 8 files changed +75
-3
lines changed
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 1
1
import 'package:flutter/material.dart' ;
2
2
import 'package:get/get.dart' ;
3
+ import 'common/theme/theme-switcher.helper.dart' ;
3
4
import 'screens/home/home.binding.dart' ;
4
5
import 'screens/home/home.screen.dart' ;
5
6
@@ -14,5 +15,8 @@ class MyApp extends StatelessWidget {
14
15
Widget build (BuildContext context) => GetMaterialApp (
15
16
initialBinding: HomeBinding (),
16
17
home: const HomeScreen (),
18
+ theme: ThemeHelper .lightTheme,
19
+ darkTheme: ThemeHelper .darkTheme,
20
+ themeMode: ThemeMode .light,
17
21
);
18
22
}
Original file line number Diff line number Diff line change 1
1
import 'package:get/get.dart' ;
2
+ import '../../common/theme-switcher/theme-switcher.controller.dart' ;
2
3
import 'todo/add-task/add-task.controller.dart' ;
3
4
import 'todo/filter-panel/filter-panel.controller.dart' ;
4
5
import 'todo/task-list-item/task-list-item.controller.dart' ;
@@ -9,6 +10,7 @@ class HomeBinding extends Bindings {
9
10
Future <void > dependencies () async {
10
11
Get
11
12
..lazyPut (TodoService .new )
13
+ ..lazyPut (ThemeController .new )
12
14
..lazyPut (() => AddTaskController (Get .find ()))
13
15
..lazyPut (() => FilterPanelController (Get .find ()))
14
16
..lazyPut (() => TaskListItemController (Get .find (), Get .find ()));
Original file line number Diff line number Diff line change 1
1
import 'package:flutter/material.dart' ;
2
+ import '../../common/theme-switcher/theme-switcher.widget.dart' ;
2
3
import 'todo/todo.widget.dart' ;
3
4
import '../home/title/title.widget.dart' ;
4
5
5
6
class HomeScreen extends StatelessWidget {
6
7
const HomeScreen ({super .key});
8
+
7
9
@override
8
10
Widget build (BuildContext context) => Scaffold (
9
- backgroundColor: Colors .white ,
11
+ backgroundColor: Theme . of (context).scaffoldBackgroundColor ,
10
12
body: ListView (
11
13
children: const < Widget > [
12
14
Center (child: TitleWidget ()),
15
+ ThemeSwitcherWidget (),
13
16
TodoWidget (),
14
17
],
15
18
),
Original file line number Diff line number Diff line change @@ -56,8 +56,6 @@ class TaskListItemWidget extends StatelessWidget {
56
56
decoration: task.isFinished.value
57
57
? TextDecoration .lineThrough
58
58
: null ,
59
- color:
60
- task.isFinished.value ? Colors .grey : Colors .black,
61
59
),
62
60
),
63
61
),
You can’t perform that action at this time.
0 commit comments