Skip to content

Commit ec80df5

Browse files
Fixed 24 hour app settings to reflect all over app
1 parent 9cd58b3 commit ec80df5

File tree

17 files changed

+240
-61
lines changed

17 files changed

+240
-61
lines changed

lib/app/modules/detailRoute/views/dateTimePicker.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,14 @@ class DateTimeWidget extends StatelessWidget {
163163
var time = await showTimePicker(
164164
context: context,
165165
initialTime: TimeOfDay.now(),
166+
builder: (BuildContext context, Widget? child) {
167+
return MediaQuery(
168+
data: MediaQuery.of(context).copyWith(
169+
alwaysUse24HourFormat: AppSettings.use24HourFormatRx.value,
170+
),
171+
child: child!,
172+
);
173+
},
166174
);
167175
if (time != null) {
168176
var dateTime = date.add(

lib/app/modules/detailRoute/views/detail_route_view.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,10 @@ class AttributeWidget extends StatelessWidget {
245245
@override
246246
Widget build(BuildContext context) {
247247
var localValue = (value is DateTime)
248-
? DateFormat.yMEd().add_jms().format(value.toLocal())
248+
? DateFormat(AppSettings.use24HourFormatRx.value
249+
? 'EEE, yyyy-MM-dd HH:mm:ss'
250+
: 'EEE, yyyy-MM-dd hh:mm:ss a')
251+
.format(value.toLocal())
249252
: ((value is BuiltList) ? (value).toBuilder() : value);
250253
TaskwarriorColorTheme tColors =
251254
Theme.of(context).extension<TaskwarriorColorTheme>()!;

lib/app/modules/home/controllers/home_controller.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ class HomeController extends GetxController {
8686
handleHomeWidgetClicked();
8787
}
8888
fetchTasksFromDB();
89+
90+
ever(AppSettings.use24HourFormatRx, (_) {
91+
_refreshTasks();
92+
update();
93+
});
94+
8995
everAll([
9096
pendingFilter,
9197
waitingFilter,
@@ -501,7 +507,6 @@ class HomeController extends GetxController {
501507
RxBool syncOnStart = false.obs;
502508
RxBool syncOnTaskCreate = false.obs;
503509
RxBool delaytask = false.obs;
504-
RxBool change24hr = false.obs;
505510
RxBool taskchampion = false.obs;
506511

507512
// dialogue box

lib/app/modules/home/views/nav_drawer.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,6 @@ class NavDrawer extends StatelessWidget {
224224
prefs.getBool('sync-OnTaskCreate') ?? false;
225225
homeController.delaytask.value =
226226
prefs.getBool('delaytask') ?? false;
227-
homeController.change24hr.value =
228-
prefs.getBool('24hourformate') ?? false;
229227

230228
Get.toNamed(Routes.SETTINGS);
231229
},

lib/app/modules/settings/controllers/settings_controller.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ class SettingsController extends GetxController {
203203
RxBool isSyncOnStartActivel = false.obs;
204204
RxBool isSyncOnTaskCreateActivel = false.obs;
205205
RxBool delaytask = false.obs;
206-
RxBool change24hr = false.obs;
207206
RxBool taskchampion = false.obs;
208207
RxBool isDarkModeOn = false.obs;
209208

@@ -218,7 +217,6 @@ class SettingsController extends GetxController {
218217
isSyncOnTaskCreateActivel.value =
219218
prefs.getBool('sync-OnTaskCreate') ?? false;
220219
delaytask.value = prefs.getBool('delaytask') ?? false;
221-
change24hr.value = prefs.getBool('24hourformate') ?? false;
222220
taskchampion.value = prefs.getBool('settings_taskc') ?? false;
223221
initDarkMode();
224222
baseDirectory.value = await getBaseDirectory();

lib/app/modules/settings/views/settings_page_enable_24hr_format_list_tile_trailing.dart

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import 'package:flutter/material.dart';
22

33
import 'package:get/get.dart';
4-
import 'package:shared_preferences/shared_preferences.dart';
5-
import 'package:taskwarrior/app/modules/home/controllers/home_controller.dart';
4+
import 'package:taskwarrior/app/utils/app_settings/app_settings.dart';
65

76
import '../controllers/settings_controller.dart';
87

9-
108
class SettingsPageEnable24hrFormatListTileTrailing extends StatelessWidget {
119
final SettingsController controller;
1210
const SettingsPageEnable24hrFormatListTileTrailing(
@@ -16,13 +14,14 @@ class SettingsPageEnable24hrFormatListTileTrailing extends StatelessWidget {
1614
Widget build(BuildContext context) {
1715
return Obx(
1816
() => Switch(
19-
value: controller.change24hr.value,
17+
value: AppSettings.use24HourFormatRx.value,
2018
onChanged: (bool value) async {
21-
controller.change24hr.value = value;
22-
23-
final SharedPreferences prefs = await SharedPreferences.getInstance();
24-
await prefs.setBool('24hourformate', value);
25-
Get.find<HomeController>().change24hr.value = value;
19+
AppSettings.use24HourFormatRx.value = value;
20+
AppSettings.saveSettings(
21+
AppSettings.isDarkMode,
22+
AppSettings.selectedLanguage,
23+
value,
24+
);
2625
},
2726
),
2827
);

lib/app/services/notification_services.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import 'package:flutter/foundation.dart';
77
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
88
import 'package:timezone/data/latest.dart' as tz;
99
import 'package:timezone/timezone.dart' as tz;
10+
import 'package:intl/intl.dart';
11+
import 'package:taskwarrior/app/utils/app_settings/app_settings.dart';
1012

1113
class NotificationService {
1214
final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin =
@@ -53,13 +55,21 @@ class NotificationService {
5355
return notificationId;
5456
}
5557

58+
// Helper method to format date time based on user preferences
59+
String getFormattedDateTime(DateTime dateTime) {
60+
String timeFormat = AppSettings.use24HourFormatRx.value
61+
? 'yyyy-MM-dd HH:mm:ss'
62+
: 'yyyy-MM-dd hh:mm:ss a';
63+
return DateFormat(timeFormat).format(dateTime);
64+
}
65+
5666
void sendNotification(
5767
DateTime dtb, String taskname, bool isWait, DateTime entryTime) async {
5868
DateTime dateTime = DateTime.now();
5969
tz.initializeTimeZones();
6070
if (kDebugMode) {
6171
print("date and time are:-$dateTime");
62-
print("date and time are:-$dtb");
72+
print("date and time are:-${getFormattedDateTime(dtb)}");
6373
}
6474
final tz.TZDateTime scheduledAt =
6575
tz.TZDateTime.from(dtb.add(const Duration(minutes: 0)), tz.local);

lib/app/utils/app_settings/app_settings.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1+
import 'package:get/get.dart';
12
import 'package:shared_preferences/shared_preferences.dart';
23
import 'package:taskwarrior/app/utils/language/supported_language.dart';
34

45
part 'save_tour_status.dart';
56
part 'selected_theme.dart';
67
part 'selected_language.dart';
8+
part 'selected_time_format.dart';
79

810
class AppSettings {
911
static bool isDarkMode = true;
1012
static SupportedLanguage selectedLanguage = SupportedLanguage.english;
13+
static final RxBool use24HourFormatRx = false.obs;
1114

1215
static Future init() async {
1316
await SelectedTheme.init();
1417
await SelectedLanguage.init();
1518
await SaveTourStatus.init();
19+
await SelectedTimeFormat.init();
1620

1721
isDarkMode = SelectedTheme.getMode() ?? true;
1822

@@ -27,11 +31,13 @@ class AppSettings {
2731
// Save the system language as the user's preference
2832
await SelectedLanguage.saveSelectedLanguage(selectedLanguage);
2933
}
34+
use24HourFormatRx.value = SelectedTimeFormat.getTimeFormat() ?? false;
3035
}
3136

3237
static Future saveSettings(
33-
bool isDarkMode, SupportedLanguage language) async {
38+
bool isDarkMode, SupportedLanguage language, bool use24hour) async {
3439
await SelectedTheme.saveMode(isDarkMode);
3540
await SelectedLanguage.saveSelectedLanguage(language);
41+
await SelectedTimeFormat.saveTimeFormat(use24hour);
3642
}
3743
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
part of 'app_settings.dart';
2+
3+
class SelectedTimeFormat {
4+
static SharedPreferences? _preferences;
5+
6+
static Future init() async {
7+
_preferences = await SharedPreferences.getInstance();
8+
}
9+
10+
static Future saveTimeFormat(bool mode) async {
11+
await _preferences?.setBool('24hourformate', mode);
12+
}
13+
14+
static bool? getTimeFormat() {
15+
return _preferences?.getBool('24hourformate');
16+
}
17+
}
Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
String age(DateTime dt) => difference(DateTime.now().difference(dt));
1+
import 'package:intl/intl.dart';
2+
import 'package:taskwarrior/app/utils/app_settings/app_settings.dart';
23

3-
String when(DateTime dt) => difference(dt.difference(DateTime.now()));
4+
String age(DateTime dt, {bool? use24HourFormat}) {
5+
final format = AppSettings.use24HourFormatRx.value;
46

5-
String difference(Duration difference) {
67
String result;
7-
var days = difference.abs().inDays;
8+
var days = DateTime.now().difference(dt).abs().inDays;
89
if (days > 365) {
910
result =
1011
'${(days / 365).toStringAsFixed(1).replaceFirst(RegExp(r'\.0$'), '')}y';
@@ -14,12 +15,46 @@ String difference(Duration difference) {
1415
result = '${days ~/ 7}w';
1516
} else if (days > 0) {
1617
result = '${days}d';
17-
} else if (difference.abs().inHours > 0) {
18-
result = '${difference.abs().inHours}h';
19-
} else if (difference.abs().inMinutes > 0) {
20-
result = '${difference.abs().inMinutes}min';
18+
} else if (DateTime.now().difference(dt).abs().inHours > 0) {
19+
result = '${DateTime.now().difference(dt).abs().inHours}h';
20+
} else if (DateTime.now().difference(dt).abs().inMinutes > 0) {
21+
result = '${DateTime.now().difference(dt).abs().inMinutes}min';
2122
} else {
22-
result = '${difference.abs().inSeconds}s';
23+
result = '${DateTime.now().difference(dt).abs().inSeconds}s';
2324
}
24-
return '$result ${(difference.isNegative) ? 'ago ' : ''}';
25+
26+
// Format the time part according to the format preference
27+
String timeFormat = format ? 'HH:mm' : 'hh:mm a';
28+
String formattedTime = DateFormat(timeFormat).format(dt);
29+
30+
return '$result ago ($formattedTime)';
31+
}
32+
33+
String when(DateTime dt, {bool? use24HourFormat}) {
34+
final format = AppSettings.use24HourFormatRx.value;
35+
36+
String result;
37+
var days = dt.difference(DateTime.now()).abs().inDays;
38+
if (days > 365) {
39+
result =
40+
'${(days / 365).toStringAsFixed(1).replaceFirst(RegExp(r'\.0$'), '')}y';
41+
} else if (days > 30) {
42+
result = '${days ~/ 30}mo';
43+
} else if (days > 7) {
44+
result = '${days ~/ 7}w';
45+
} else if (days > 0) {
46+
result = '${days}d';
47+
} else if (dt.difference(DateTime.now()).abs().inHours > 0) {
48+
result = '${dt.difference(DateTime.now()).abs().inHours}h';
49+
} else if (dt.difference(DateTime.now()).abs().inMinutes > 0) {
50+
result = '${dt.difference(DateTime.now()).abs().inMinutes}min';
51+
} else {
52+
result = '${dt.difference(DateTime.now()).abs().inSeconds}s';
53+
}
54+
55+
// Format the time part according to the format preference
56+
String timeFormat = format ? 'HH:mm' : 'hh:mm a';
57+
String formattedTime = DateFormat(timeFormat).format(dt);
58+
59+
return '$result ($formattedTime)';
2560
}

0 commit comments

Comments
 (0)