Skip to content

Commit 6405eca

Browse files
authored
Merge pull request #44 from Procoder16/feature/lightTheme
Added light theme feature
2 parents fbc809f + 476f76c commit 6405eca

25 files changed

+395
-280
lines changed

assets/images/moon.png

49.8 KB
Loading

assets/images/sun.png

33.9 KB
Loading

lib/Components/add_torrent_sheet.dart

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'dart:io';
44
import 'package:clipboard/clipboard.dart';
55
import 'package:file_picker/file_picker.dart';
66
import 'package:flood_mobile/Api/torrent_api.dart';
7-
import 'package:flood_mobile/Constants/app_color.dart';
7+
import 'package:flood_mobile/Constants/theme_provider.dart';
88
import 'package:flood_mobile/Model/client_settings_model.dart';
99
import 'package:flutter/material.dart';
1010
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@@ -44,6 +44,7 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
4444
@override
4545
Widget build(BuildContext context) {
4646
return Container(
47+
color: ThemeProvider.theme.primaryColorLight,
4748
padding: EdgeInsets.symmetric(vertical: 25, horizontal: 20),
4849
child: Form(
4950
key: _formKey,
@@ -54,17 +55,18 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
5455
TextField(
5556
controller: directoryController,
5657
style: TextStyle(
57-
color: AppColor.textColor,
58+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
5859
),
5960
decoration: InputDecoration(
6061
prefixIcon: Icon(
6162
Icons.folder,
62-
color: Colors.white,
63+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
6364
),
6465
labelText: 'Destination',
6566
hintText: 'Destination',
66-
labelStyle:
67-
TextStyle(fontFamily: 'Montserrat', color: Colors.white),
67+
labelStyle: TextStyle(
68+
fontFamily: 'Montserrat',
69+
color: ThemeProvider.theme.textTheme.bodyText1?.color),
6870
border: OutlineInputBorder(
6971
borderRadius: BorderRadius.circular(8),
7072
),
@@ -77,12 +79,12 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
7779
? TextFormField(
7880
controller: magnetUrlController,
7981
style: TextStyle(
80-
color: AppColor.textColor,
82+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
8183
),
8284
decoration: InputDecoration(
8385
prefixIcon: Icon(
8486
Icons.link,
85-
color: Colors.white,
87+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
8688
),
8789
suffix: GestureDetector(
8890
child: Icon(Icons.paste),
@@ -99,7 +101,7 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
99101
hintText: 'Torrent URL or Magnet Link',
100102
labelStyle: TextStyle(
101103
fontFamily: 'Montserrat',
102-
color: Colors.white,
104+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
103105
),
104106
border: OutlineInputBorder(
105107
borderRadius: BorderRadius.circular(8),
@@ -120,8 +122,8 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
120122
)
121123
: Container(),
122124
CheckboxListTile(
123-
activeColor: AppColor.greenAccentColor,
124-
tileColor: AppColor.secondaryColor,
125+
activeColor: ThemeProvider.theme.primaryColorDark,
126+
tileColor: ThemeProvider.theme.primaryColorLight,
125127
shape: RoundedRectangleBorder(
126128
borderRadius: BorderRadius.circular(8),
127129
),
@@ -137,8 +139,8 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
137139
},
138140
),
139141
CheckboxListTile(
140-
activeColor: AppColor.greenAccentColor,
141-
tileColor: AppColor.secondaryColor,
142+
activeColor: ThemeProvider.theme.primaryColorDark,
143+
tileColor: ThemeProvider.theme.primaryColorLight,
142144
shape: RoundedRectangleBorder(
143145
borderRadius: BorderRadius.circular(8),
144146
),
@@ -154,8 +156,8 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
154156
},
155157
),
156158
CheckboxListTile(
157-
activeColor: AppColor.greenAccentColor,
158-
tileColor: AppColor.secondaryColor,
159+
activeColor: ThemeProvider.theme.primaryColorDark,
160+
tileColor: ThemeProvider.theme.primaryColorLight,
159161
shape: RoundedRectangleBorder(
160162
borderRadius: BorderRadius.circular(8),
161163
),
@@ -193,7 +195,7 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
193195
Text(
194196
'or',
195197
style: TextStyle(
196-
color: Colors.white,
198+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
197199
fontSize: 12,
198200
fontWeight: FontWeight.w900),
199201
),
@@ -270,13 +272,13 @@ class _AddTorrentSheetState extends State<AddTorrentSheet> {
270272
shape: RoundedRectangleBorder(
271273
borderRadius: BorderRadius.circular(14.0),
272274
),
273-
primary: AppColor.greenAccentColor,
275+
primary: ThemeProvider.theme.primaryColorDark,
274276
),
275277
child: Center(
276278
child: Text(
277279
"Add Torrent",
278280
style: TextStyle(
279-
color: Colors.white,
281+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
280282
fontSize: 16,
281283
fontWeight: FontWeight.w900),
282284
),

lib/Components/base_app_bar.dart

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import 'package:badges/badges.dart';
2-
import 'package:flood_mobile/Constants/app_color.dart';
1+
import 'package:flood_mobile/Constants/theme_provider.dart';
32
import 'package:flood_mobile/Provider/home_provider.dart';
43
import 'package:flutter/material.dart';
54
import 'package:provider/provider.dart';
65

7-
import 'notification_popup_dialogue_container.dart';
6+
import 'change_theme_button_widget.dart';
87

98
class BaseAppBar extends StatelessWidget implements PreferredSizeWidget {
109
final AppBar appBar;
@@ -26,36 +25,10 @@ class BaseAppBar extends StatelessWidget implements PreferredSizeWidget {
2625
height: 60,
2726
),
2827
centerTitle: true,
29-
backgroundColor: AppColor.primaryColor,
28+
backgroundColor: ThemeProvider.theme.primaryColor,
3029
elevation: 0,
3130
actions: [
32-
Badge(
33-
badgeColor: AppColor.blueAccentColor,
34-
badgeContent: Center(
35-
child: Text(
36-
homeModel.unreadNotifications.toString(),
37-
style: TextStyle(color: Colors.white),
38-
),
39-
),
40-
position: BadgePosition(top: 0, end: 3),
41-
child: IconButton(
42-
icon: Icon(
43-
Icons.notifications,
44-
color: Colors.white,
45-
),
46-
onPressed: () {
47-
showDialog(
48-
context: context,
49-
builder: (BuildContext context) {
50-
return AlertDialog(
51-
backgroundColor: AppColor.secondaryColor,
52-
content: notificationPopupDialogueContainer(
53-
context: context),
54-
);
55-
});
56-
},
57-
),
58-
),
31+
ChangeThemeButtonWidget(),
5932
],
6033
);
6134
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flood_mobile/Constants/theme_provider.dart';
3+
import 'package:provider/provider.dart';
4+
5+
class ChangeThemeButtonWidget extends StatelessWidget {
6+
@override
7+
Widget build(BuildContext context) {
8+
final themeProvider = Provider.of<ThemeProvider>(context);
9+
10+
return Switch.adaptive(
11+
splashRadius: 2.0,
12+
activeThumbImage: AssetImage(
13+
'assets/images/moon.png',
14+
),
15+
inactiveThumbImage: AssetImage('assets/images/sun.png'),
16+
value: themeProvider.isDarkMode,
17+
onChanged: (value) {
18+
final provider = Provider.of<ThemeProvider>(context, listen: false);
19+
provider.toggleTheme(value);
20+
},
21+
);
22+
}
23+
}

lib/Components/delete_torrent_sheet.dart

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:flood_mobile/Api/torrent_api.dart';
2-
import 'package:flood_mobile/Constants/app_color.dart';
2+
import 'package:flood_mobile/Constants/theme_provider.dart';
33
import 'package:flood_mobile/Model/torrent_model.dart';
44
import 'package:flutter/material.dart';
55

@@ -46,7 +46,7 @@ class _DeleteTorrentSheetState extends State<DeleteTorrentSheet> {
4646
children: [
4747
Checkbox(
4848
value: deleteWithData,
49-
activeColor: AppColor.greenAccentColor,
49+
activeColor: ThemeProvider.theme.primaryColorDark,
5050
onChanged: (bool? value) {
5151
print(value);
5252
setState(() {
@@ -85,7 +85,8 @@ class _DeleteTorrentSheetState extends State<DeleteTorrentSheet> {
8585
child: Text(
8686
"No",
8787
style: TextStyle(
88-
color: Colors.white,
88+
color:
89+
ThemeProvider.theme.textTheme.bodyText1?.color,
8990
fontSize: 16,
9091
fontWeight: FontWeight.w900),
9192
),
@@ -113,13 +114,14 @@ class _DeleteTorrentSheetState extends State<DeleteTorrentSheet> {
113114
shape: RoundedRectangleBorder(
114115
borderRadius: BorderRadius.circular(14.0),
115116
),
116-
primary: AppColor.greenAccentColor,
117+
primary: ThemeProvider.theme.primaryColorDark,
117118
),
118119
child: Center(
119120
child: Text(
120121
"Yes",
121122
style: TextStyle(
122-
color: Colors.white,
123+
color:
124+
ThemeProvider.theme.textTheme.bodyText1?.color,
123125
fontSize: 16,
124126
fontWeight: FontWeight.w900),
125127
),

lib/Components/logout_alert.dart

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:flood_mobile/Constants/app_color.dart';
1+
import 'package:flood_mobile/Constants/theme_provider.dart';
22
import 'package:flutter/material.dart';
33

44
class LogOutAlert extends StatelessWidget {
@@ -11,7 +11,7 @@ class LogOutAlert extends StatelessWidget {
1111
Widget build(BuildContext context) {
1212
final hp = MediaQuery.of(context).size.height;
1313
return AlertDialog(
14-
backgroundColor: AppColor.secondaryColor,
14+
backgroundColor: ThemeProvider.theme.primaryColorLight,
1515
shape: RoundedRectangleBorder(
1616
borderRadius: BorderRadius.all(
1717
Radius.circular(12),
@@ -22,7 +22,7 @@ class LogOutAlert extends StatelessWidget {
2222
'Are you sure you want to\n Log out ?',
2323
textAlign: TextAlign.center,
2424
style: TextStyle(
25-
color: Colors.white,
25+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
2626
fontWeight: FontWeight.bold,
2727
fontSize: 20,
2828
),
@@ -41,12 +41,13 @@ class LogOutAlert extends StatelessWidget {
4141
Size(hp * .160, hp * .059),
4242
),
4343
backgroundColor:
44-
MaterialStateProperty.all(AppColor.greenAccentColor),
44+
MaterialStateProperty.all(ThemeProvider.theme.primaryColorDark),
4545
),
4646
onPressed: logoutOnClick,
4747
child: Text(
4848
'Yes',
49-
style: TextStyle(color: Colors.white),
49+
style: TextStyle(
50+
color: ThemeProvider.theme.textTheme.bodyText1?.color),
5051
),
5152
),
5253
// Space in between Buttons
@@ -62,15 +63,16 @@ class LogOutAlert extends StatelessWidget {
6263
borderRadius: BorderRadius.circular(12),
6364
),
6465
),
65-
backgroundColor:
66-
MaterialStateProperty.all(AppColor.greyAccentColor),
66+
backgroundColor: MaterialStateProperty.all(
67+
ThemeProvider.theme.dialogBackgroundColor),
6768
),
6869
onPressed: () {
6970
Navigator.of(context, rootNavigator: true).pop();
7071
},
7172
child: Text(
7273
'No',
73-
style: TextStyle(color: Colors.white),
74+
style: TextStyle(
75+
color: ThemeProvider.theme.textTheme.bodyText1?.color),
7476
),
7577
),
7678
],

lib/Components/notification_popup_dialogue_container.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:flood_mobile/Api/notifications_api.dart';
2-
import 'package:flood_mobile/Constants/app_color.dart';
2+
import 'package:flood_mobile/Constants/theme_provider.dart';
33
import 'package:flood_mobile/Model/notification_model.dart';
44
import 'package:flood_mobile/Provider/home_provider.dart';
55
import 'package:flutter/material.dart';
@@ -12,17 +12,17 @@ Widget notificationPopupDialogueContainer({required BuildContext context}) {
1212
.length ==
1313
0)
1414
? Container(
15-
color: AppColor.secondaryColor,
15+
color: ThemeProvider.theme.primaryColorLight,
1616
width: 300,
1717
child: Text(
1818
'No notifications to display',
1919
style: TextStyle(
20-
color: AppColor.textColor,
20+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
2121
),
2222
),
2323
)
2424
: Container(
25-
color: AppColor.secondaryColor,
25+
color: ThemeProvider.theme.backgroundColor,
2626
width: 300.0, // Change as per your requirement
2727
child: ListView.builder(
2828
shrinkWrap: true,
@@ -94,7 +94,7 @@ class NotificationListTile extends StatelessWidget {
9494
textAlign: TextAlign.left,
9595
style: TextStyle(
9696
fontSize: 16,
97-
color: AppColor.blueAccentColor,
97+
color: ThemeProvider.theme.accentColor,
9898
fontWeight: FontWeight.bold),
9999
),
100100
SizedBox(
@@ -113,7 +113,7 @@ class NotificationListTile extends StatelessWidget {
113113
textAlign: TextAlign.left,
114114
style: TextStyle(
115115
fontSize: 14,
116-
color: Colors.white,
116+
color: ThemeProvider.theme.textTheme.bodyText1?.color,
117117
),
118118
),
119119
],

0 commit comments

Comments
 (0)