Skip to content

Commit 233d190

Browse files
Fixed 24 hour app settings to reflect all over app
1 parent f4947d7 commit 233d190

18 files changed

+244
-62
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/home/views/show_details.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,10 @@ class _TaskDetailsState extends State<TaskDetails> {
351351

352352
try {
353353
DateTime parsedDate = DateTime.parse(dateString);
354-
return DateFormat('yyyy-MM-dd HH:mm:ss').format(parsedDate);
354+
String timeFormat = AppSettings.use24HourFormatRx.value
355+
? 'yyyy-MM-dd HH:mm:ss'
356+
: 'yyyy-MM-dd hh:mm:ss a';
357+
return DateFormat(timeFormat).format(parsedDate);
355358
} catch (e) {
356359
debugPrint('Error parsing date: $dateString');
357360
return '-';

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ class SettingsController extends GetxController {
163163
RxBool isSyncOnStartActivel = false.obs;
164164
RxBool isSyncOnTaskCreateActivel = false.obs;
165165
RxBool delaytask = false.obs;
166-
RxBool change24hr = false.obs;
167166
RxBool taskchampion = false.obs;
168167
RxBool isDarkModeOn = false.obs;
169168

@@ -178,7 +177,6 @@ class SettingsController extends GetxController {
178177
isSyncOnTaskCreateActivel.value =
179178
prefs.getBool('sync-OnTaskCreate') ?? false;
180179
delaytask.value = prefs.getBool('delaytask') ?? false;
181-
change24hr.value = prefs.getBool('24hourformate') ?? false;
182180
taskchampion.value = prefs.getBool('settings_taskc') ?? false;
183181
initDarkMode();
184182
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+
}

0 commit comments

Comments
 (0)