From 5d5fd125daf5b05756423e2bed80ae23be6b16d2 Mon Sep 17 00:00:00 2001 From: Om Dhumal Date: Sun, 18 Jan 2026 22:05:44 +0530 Subject: [PATCH] sync setting --- .../controllers/settings_controller.dart | 33 ++++++- .../settings/views/settings_page_body.dart | 96 +++++++++++++------ 2 files changed, 97 insertions(+), 32 deletions(-) diff --git a/lib/app/modules/settings/controllers/settings_controller.dart b/lib/app/modules/settings/controllers/settings_controller.dart index dd9a89da..a40d8c31 100644 --- a/lib/app/modules/settings/controllers/settings_controller.dart +++ b/lib/app/modules/settings/controllers/settings_controller.dart @@ -24,6 +24,9 @@ import 'package:taskwarrior/app/v3/db/task_database.dart'; class SettingsController extends GetxController { RxBool isMovingDirectory = false.obs; + RxBool taskchampion = false.obs; + RxBool taskReplica = false.obs; + RxBool serverCertExists = false.obs; Rx selectedLanguage = AppSettings.selectedLanguage.obs; RxString baseDirectory = "".obs; @@ -218,7 +221,6 @@ class SettingsController extends GetxController { RxBool isSyncOnTaskCreateActivel = false.obs; RxBool delaytask = false.obs; RxBool change24hr = false.obs; - RxBool taskchampion = false.obs; RxBool isDarkModeOn = false.obs; void initDarkMode() { @@ -227,15 +229,38 @@ class SettingsController extends GetxController { @override void onInit() async { + super.onInit(); + baseDirectory.value = await getBaseDirectory(); + initDarkMode(); + // 1. Check status immediately + await updateSyncStatus(); + // 2. Re-check status whenever the Profile changes + ever(Get.find().currentProfile, (_) async { + await updateSyncStatus(); + }); + } + + Future updateSyncStatus() async { final SharedPreferences prefs = await SharedPreferences.getInstance(); + // Load Sync Settings isSyncOnStartActivel.value = prefs.getBool('sync-onStart') ?? false; isSyncOnTaskCreateActivel.value = prefs.getBool('sync-OnTaskCreate') ?? false; delaytask.value = prefs.getBool('delaytask') ?? false; change24hr.value = prefs.getBool('24hourformate') ?? false; + // Load Profile Modes taskchampion.value = prefs.getBool('settings_taskc') ?? false; - initDarkMode(); - baseDirectory.value = await getBaseDirectory(); - super.onInit(); + taskReplica.value = prefs.getBool('settings_taskr_repl') ?? false; + // Load Legacy Certs status safely + if (Get.isRegistered()) { + try { + serverCertExists.value = + Get.find().serverCertExists.value; + } catch (e) { + serverCertExists.value = false; + } + } else { + serverCertExists.value = false; + } } } diff --git a/lib/app/modules/settings/views/settings_page_body.dart b/lib/app/modules/settings/views/settings_page_body.dart index be8ab981..41011c50 100644 --- a/lib/app/modules/settings/views/settings_page_body.dart +++ b/lib/app/modules/settings/views/settings_page_body.dart @@ -76,39 +76,79 @@ class SettingsPageBody extends StatelessWidget { context, tColors, [ - Obx( - () => SettingsPageListTile( - title: SentenceManager( - currentLanguage: controller.selectedLanguage.value) - .sentences - .settingsPageSyncOnStartTitle, - subTitle: SentenceManager( - currentLanguage: controller.selectedLanguage.value) - .sentences - .settingsPageSyncOnStartDescription, - trailing: SettingsPageOnTaskStartListTileTrailing( - controller: controller, + Obx(() { + // 1. Check if TaskServer is configured + final bool isEnabled = controller.taskchampion.value; + // 2. Wrap in GestureDetector to handle clicks on disabled state + return GestureDetector( + onTap: !isEnabled + ? () => ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Please configure a TaskServer first'), + backgroundColor: tColors.secondaryBackgroundColor), + ) + : null, + child: Opacity( + // 3. Dim the UI if disabled + opacity: isEnabled ? 1.0 : 0.5, + child: AbsorbPointer( + // 4. Block interaction if disabled + absorbing: !isEnabled, + child: SettingsPageListTile( + title: SentenceManager( + currentLanguage: + controller.selectedLanguage.value) + .sentences + .settingsPageSyncOnStartTitle, + subTitle: SentenceManager( + currentLanguage: + controller.selectedLanguage.value) + .sentences + .settingsPageSyncOnStartDescription, + trailing: SettingsPageOnTaskStartListTileTrailing( + controller: controller, + ), + ), + ), ), - ), - ), + ); + }), Divider( height: 1, color: tColors.primaryDisabledTextColor?.withOpacity(0.1)), - Obx( - () => SettingsPageListTile( - title: SentenceManager( - currentLanguage: controller.selectedLanguage.value) - .sentences - .settingsPageEnableSyncOnTaskCreateTitle, - subTitle: SentenceManager( - currentLanguage: controller.selectedLanguage.value) - .sentences - .settingsPageEnableSyncOnTaskCreateDescription, - trailing: SettingsPageOnTaskCreateListTileTrailing( - controller: controller, + Obx(() { + final bool isEnabled = controller.taskchampion.value; + return GestureDetector( + onTap: !isEnabled + ? () => ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Please configure a TaskServer first'), + backgroundColor: tColors.secondaryBackgroundColor), + ) + : null, + child: Opacity( + opacity: isEnabled ? 1.0 : 0.5, + child: AbsorbPointer( + absorbing: !isEnabled, + child: SettingsPageListTile( + title: SentenceManager( + currentLanguage: + controller.selectedLanguage.value) + .sentences + .settingsPageEnableSyncOnTaskCreateTitle, + subTitle: SentenceManager( + currentLanguage: + controller.selectedLanguage.value) + .sentences + .settingsPageEnableSyncOnTaskCreateDescription, + trailing: SettingsPageOnTaskCreateListTileTrailing( + controller: controller, + ), + ), + ), ), - ), - ), + ); + }), ], ), const SizedBox(height: 16),