Skip to content

Commit f5d1efd

Browse files
authored
getx: add ccsync creds widget as getx route (#493)
1 parent 2822bf6 commit f5d1efd

File tree

8 files changed

+133
-111
lines changed

8 files changed

+133
-111
lines changed

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:taskwarrior/app/utils/constants/taskwarrior_colors.dart';
88
import 'package:taskwarrior/app/utils/gen/fonts.gen.dart';
99
import 'package:taskwarrior/app/utils/language/sentence_manager.dart';
1010
import 'package:taskwarrior/app/utils/taskchampion/credentials_storage.dart';
11-
import 'package:taskwarrior/app/utils/taskchampion/taskchampion.dart';
1211
import 'package:taskwarrior/app/utils/taskserver/taskserver.dart';
1312
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
1413

@@ -74,11 +73,7 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
7473
.homePageSetup,
7574
onPressed: () {
7675
if (controller.taskchampion.value) {
77-
Navigator.push(
78-
context,
79-
MaterialPageRoute(
80-
builder: (_) => ManageTaskChampionCreds(),
81-
)).then((value) {});
76+
Get.toNamed(Routes.MANAGE_TASK_CHAMPION_CREDS);
8277
} else {
8378
Get.toNamed(Routes.MANAGE_TASK_SERVER);
8479
}

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:taskwarrior/app/utils/constants/constants.dart';
1212
import 'package:taskwarrior/app/utils/constants/taskwarrior_fonts.dart';
1313
import 'package:taskwarrior/app/utils/constants/utilites.dart';
1414
import 'package:taskwarrior/app/utils/language/sentence_manager.dart';
15-
import 'package:taskwarrior/app/utils/taskchampion/taskchampion.dart';
1615
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
1716
import 'package:taskwarrior/app/utils/themes/dark_theme.dart';
1817
import 'package:taskwarrior/app/utils/themes/light_theme.dart';
@@ -23,7 +22,8 @@ class NavDrawer extends StatelessWidget {
2322

2423
@override
2524
Widget build(BuildContext context) {
26-
TaskwarriorColorTheme tColors = Theme.of(context).extension<TaskwarriorColorTheme>()!;
25+
TaskwarriorColorTheme tColors =
26+
Theme.of(context).extension<TaskwarriorColorTheme>()!;
2727
return Drawer(
2828
backgroundColor: tColors.dialogBackgroundColor,
2929
surfaceTintColor: tColors.dialogBackgroundColor,
@@ -55,12 +55,14 @@ class NavDrawer extends StatelessWidget {
5555
child: ThemeSwitcherClipper(
5656
isDarkMode: AppSettings.isDarkMode,
5757
onTap: (bool newMode) async {
58-
Get.changeThemeMode(newMode ? ThemeMode.dark : ThemeMode.light);
58+
Get.changeThemeMode(
59+
newMode ? ThemeMode.dark : ThemeMode.light);
5960
AppSettings.isDarkMode = newMode;
6061
await SelectedTheme.saveMode(AppSettings.isDarkMode);
6162
// Get.back();
6263
homeController.initLanguageAndDarkMode();
63-
Get.changeTheme(AppSettings.isDarkMode ? darkTheme : lightTheme);
64+
Get.changeTheme(
65+
AppSettings.isDarkMode ? darkTheme : lightTheme);
6466
},
6567
child: Icon(
6668
tColors.icons,
@@ -84,11 +86,7 @@ class NavDrawer extends StatelessWidget {
8486
currentLanguage: homeController.selectedLanguage.value,
8587
).sentences.ccsyncCredentials,
8688
onTap: () {
87-
Navigator.of(context).push(
88-
MaterialPageRoute(
89-
builder: (context) => ManageTaskChampionCreds(),
90-
),
91-
);
89+
Get.toNamed(Routes.MANAGE_TASK_CHAMPION_CREDS);
9290
},
9391
),
9492
),
@@ -245,7 +243,8 @@ class NavDrawer extends StatelessWidget {
245243
}
246244

247245
Future<void> _showExitConfirmationDialog(BuildContext context) async {
248-
TaskwarriorColorTheme tColors = Theme.of(context).extension<TaskwarriorColorTheme>()!;
246+
TaskwarriorColorTheme tColors =
247+
Theme.of(context).extension<TaskwarriorColorTheme>()!;
249248
return showDialog<void>(
250249
context: context,
251250
barrierDismissible:
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'package:get/get.dart';
2+
3+
import '../controllers/manage_task_champion_creds_controller.dart';
4+
5+
class ManageTaskChampionCredsBinding extends Bindings {
6+
@override
7+
void dependencies() {
8+
Get.lazyPut<ManageTaskChampionCredsController>(
9+
() => ManageTaskChampionCredsController(),
10+
);
11+
}
12+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:get/get.dart';
3+
import 'package:shared_preferences/shared_preferences.dart';
4+
5+
class ManageTaskChampionCredsController extends GetxController {
6+
final encryptionSecretController = TextEditingController();
7+
final clientIdController = TextEditingController();
8+
final ccsyncBackendUrlController = TextEditingController();
9+
10+
@override
11+
void onInit() {
12+
super.onInit();
13+
loadCredentials();
14+
}
15+
16+
Future<void> loadCredentials() async {
17+
SharedPreferences prefs = await SharedPreferences.getInstance();
18+
encryptionSecretController.text = prefs.getString('encryptionSecret') ?? '';
19+
clientIdController.text = prefs.getString('clientId') ?? '';
20+
ccsyncBackendUrlController.text = prefs.getString('ccsyncBackendUrl') ?? '';
21+
}
22+
23+
Future<void> saveCredentials() async {
24+
SharedPreferences prefs = await SharedPreferences.getInstance();
25+
await prefs.setString('encryptionSecret', encryptionSecretController.text);
26+
await prefs.setString('clientId', clientIdController.text);
27+
await prefs.setString('ccsyncBackendUrl', ccsyncBackendUrlController.text);
28+
}
29+
30+
@override
31+
void onClose() {
32+
encryptionSecretController.dispose();
33+
clientIdController.dispose();
34+
ccsyncBackendUrlController.dispose();
35+
super.onClose();
36+
}
37+
}

lib/app/utils/taskchampion/taskchampion.dart renamed to lib/app/modules/manage_task_champion_creds/views/manage_task_champion_creds_view.dart

Lines changed: 29 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,21 @@
1-
// ignore_for_file: use_build_context_synchronously
2-
31
import 'package:flutter/material.dart';
2+
import 'package:get/get.dart';
43
import 'package:google_fonts/google_fonts.dart';
5-
import 'package:shared_preferences/shared_preferences.dart';
6-
import 'package:taskwarrior/app/utils/constants/taskwarrior_colors.dart';
7-
import 'package:taskwarrior/app/utils/constants/taskwarrior_fonts.dart';
4+
import 'package:taskwarrior/app/utils/constants/constants.dart';
85
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
9-
106
import 'package:url_launcher/url_launcher.dart';
7+
import '../controllers/manage_task_champion_creds_controller.dart';
118

12-
class ManageTaskChampionCreds extends StatelessWidget {
13-
final TextEditingController _encryptionSecretController =
14-
TextEditingController();
15-
final TextEditingController _clientIdController = TextEditingController();
16-
final TextEditingController _ccsyncBackendUrlController =
17-
TextEditingController();
18-
19-
ManageTaskChampionCreds({super.key}) {
20-
_loadCredentials();
21-
}
22-
23-
Future<void> _loadCredentials() async {
24-
SharedPreferences prefs = await SharedPreferences.getInstance();
25-
_encryptionSecretController.text =
26-
prefs.getString('encryptionSecret') ?? '';
27-
_clientIdController.text = prefs.getString('clientId') ?? '';
28-
_ccsyncBackendUrlController.text = prefs.getString('ccsyncBackendUrl') ?? '';
29-
}
30-
31-
Future<void> _saveCredentials(BuildContext context) async {
32-
SharedPreferences prefs = await SharedPreferences.getInstance();
33-
await prefs.setString('encryptionSecret', _encryptionSecretController.text);
34-
await prefs.setString('clientId', _clientIdController.text);
35-
await prefs.setString('ccsyncBackendUrl', _ccsyncBackendUrlController.text);
36-
ScaffoldMessenger.of(context).showSnackBar(
37-
const SnackBar(content: Text('Credentials saved successfully')),
38-
);
39-
}
9+
class ManageTaskChampionCredsView
10+
extends GetView<ManageTaskChampionCredsController> {
11+
const ManageTaskChampionCredsView({super.key});
4012

4113
@override
4214
Widget build(BuildContext context) {
15+
debugPrint("Built ManageTaskChampionCredsView");
4316
TaskwarriorColorTheme tColors =
4417
Theme.of(context).extension<TaskwarriorColorTheme>()!;
18+
4519
return Scaffold(
4620
appBar: AppBar(
4721
backgroundColor: TaskWarriorColors.kprimaryBackgroundColor,
@@ -72,8 +46,9 @@ class ManageTaskChampionCreds extends StatelessWidget {
7246
},
7347
),
7448
],
75-
leading: BackButton(
76-
color: TaskWarriorColors.white,
49+
leading: IconButton(
50+
icon: Icon(Icons.arrow_back, color: TaskWarriorColors.white),
51+
onPressed: () => Get.back(),
7752
),
7853
),
7954
backgroundColor: tColors.primaryBackgroundColor,
@@ -87,49 +62,45 @@ class ManageTaskChampionCreds extends StatelessWidget {
8762
crossAxisAlignment: CrossAxisAlignment.start,
8863
children: [
8964
TextField(
90-
style: TextStyle(
91-
color: tColors.primaryTextColor,
92-
),
93-
controller: _encryptionSecretController,
65+
style: TextStyle(color: tColors.primaryTextColor),
66+
controller: controller.encryptionSecretController,
9467
decoration: InputDecoration(
9568
labelText: 'Encryption Secret',
96-
labelStyle: TextStyle(
97-
color: tColors.primaryTextColor,
98-
),
69+
labelStyle: TextStyle(color: tColors.primaryTextColor),
9970
border: const OutlineInputBorder(),
10071
),
10172
),
10273
const SizedBox(height: 10),
10374
TextField(
104-
style: TextStyle(
105-
color: tColors.primaryTextColor,
106-
),
107-
controller: _clientIdController,
75+
style: TextStyle(color: tColors.primaryTextColor),
76+
controller: controller.clientIdController,
10877
decoration: InputDecoration(
10978
labelText: 'Client ID',
110-
labelStyle: TextStyle(
111-
color: tColors.primaryTextColor,
112-
),
79+
labelStyle: TextStyle(color: tColors.primaryTextColor),
11380
border: const OutlineInputBorder(),
11481
),
11582
),
11683
const SizedBox(height: 10),
11784
TextField(
118-
style: TextStyle(
119-
color: tColors.primaryTextColor,
120-
),
121-
controller: _ccsyncBackendUrlController,
85+
style: TextStyle(color: tColors.primaryTextColor),
86+
controller: controller.ccsyncBackendUrlController,
12287
decoration: InputDecoration(
12388
labelText: 'CCSync Backend URL',
124-
labelStyle: TextStyle(
125-
color: tColors.primaryTextColor,
126-
),
89+
labelStyle: TextStyle(color: tColors.primaryTextColor),
12790
border: const OutlineInputBorder(),
12891
),
12992
),
13093
const SizedBox(height: 20),
13194
ElevatedButton(
132-
onPressed: () => _saveCredentials(context),
95+
onPressed: () async {
96+
await controller.saveCredentials();
97+
Get.snackbar(
98+
'Success',
99+
'Credentials saved successfully',
100+
snackPosition: SnackPosition.BOTTOM,
101+
duration: Duration(seconds: 2),
102+
);
103+
},
133104
child: const Text('Save Credentials'),
134105
),
135106
const SizedBox(height: 10),

lib/app/routes/app_pages.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
// ignore_for_file: constant_identifier_names
2-
31
import 'package:get/get.dart';
42

53
import '../modules/about/bindings/about_binding.dart';
64
import '../modules/about/views/about_view.dart';
7-
85
import '../modules/detailRoute/bindings/detail_route_binding.dart';
96
import '../modules/detailRoute/views/detail_route_view.dart';
107
import '../modules/home/bindings/home_binding.dart';
118
import '../modules/home/views/home_view.dart';
129
import '../modules/manageTaskServer/bindings/manage_task_server_binding.dart';
1310
import '../modules/manageTaskServer/views/manage_task_server_view.dart';
11+
import '../modules/manage_task_champion_creds/bindings/manage_task_champion_creds_binding.dart';
12+
import '../modules/manage_task_champion_creds/views/manage_task_champion_creds_view.dart';
1413
import '../modules/onboarding/bindings/onboarding_binding.dart';
1514
import '../modules/onboarding/views/onboarding_view.dart';
1615
import '../modules/permission/bindings/permission_binding.dart';
@@ -24,6 +23,8 @@ import '../modules/settings/views/settings_view.dart';
2423
import '../modules/splash/bindings/splash_binding.dart';
2524
import '../modules/splash/views/splash_view.dart';
2625

26+
// ignore_for_file: constant_identifier_names
27+
2728
part 'app_routes.dart';
2829

2930
class AppPages {
@@ -82,5 +83,10 @@ class AppPages {
8283
page: () => const PermissionView(),
8384
binding: PermissionBinding(),
8485
),
86+
GetPage(
87+
name: _Paths.MANAGE_TASK_CHAMPION_CREDS,
88+
page: () => const ManageTaskChampionCredsView(),
89+
binding: ManageTaskChampionCredsBinding(),
90+
),
8591
];
8692
}

lib/app/routes/app_routes.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ abstract class Routes {
1515
static const REPORTS = _Paths.REPORTS;
1616
static const SETTINGS = _Paths.SETTINGS;
1717
static const PERMISSION = _Paths.PERMISSION;
18+
static const MANAGE_TASK_CHAMPION_CREDS = _Paths.MANAGE_TASK_CHAMPION_CREDS;
1819
}
1920

2021
abstract class _Paths {
@@ -29,4 +30,5 @@ abstract class _Paths {
2930
static const REPORTS = '/reports';
3031
static const SETTINGS = '/settings';
3132
static const PERMISSION = '/permission';
33+
static const MANAGE_TASK_CHAMPION_CREDS = '/manage-task-champion-creds';
3234
}

0 commit comments

Comments
 (0)