Skip to content

getx: add ccsync creds widget as getx route #493

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions lib/app/modules/home/views/home_page_app_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import 'package:taskwarrior/app/utils/constants/taskwarrior_colors.dart';
import 'package:taskwarrior/app/utils/gen/fonts.gen.dart';
import 'package:taskwarrior/app/utils/language/sentence_manager.dart';
import 'package:taskwarrior/app/utils/taskchampion/credentials_storage.dart';
import 'package:taskwarrior/app/utils/taskchampion/taskchampion.dart';
import 'package:taskwarrior/app/utils/taskserver/taskserver.dart';
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';

Expand Down Expand Up @@ -74,11 +73,7 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
.homePageSetup,
onPressed: () {
if (controller.taskchampion.value) {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => ManageTaskChampionCreds(),
)).then((value) {});
Get.toNamed(Routes.MANAGE_TASK_CHAMPION_CREDS);
} else {
Get.toNamed(Routes.MANAGE_TASK_SERVER);
}
Expand Down
19 changes: 9 additions & 10 deletions lib/app/modules/home/views/nav_drawer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import 'package:taskwarrior/app/utils/constants/constants.dart';
import 'package:taskwarrior/app/utils/constants/taskwarrior_fonts.dart';
import 'package:taskwarrior/app/utils/constants/utilites.dart';
import 'package:taskwarrior/app/utils/language/sentence_manager.dart';
import 'package:taskwarrior/app/utils/taskchampion/taskchampion.dart';
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
import 'package:taskwarrior/app/utils/themes/dark_theme.dart';
import 'package:taskwarrior/app/utils/themes/light_theme.dart';
Expand All @@ -23,7 +22,8 @@ class NavDrawer extends StatelessWidget {

@override
Widget build(BuildContext context) {
TaskwarriorColorTheme tColors = Theme.of(context).extension<TaskwarriorColorTheme>()!;
TaskwarriorColorTheme tColors =
Theme.of(context).extension<TaskwarriorColorTheme>()!;
return Drawer(
backgroundColor: tColors.dialogBackgroundColor,
surfaceTintColor: tColors.dialogBackgroundColor,
Expand Down Expand Up @@ -55,12 +55,14 @@ class NavDrawer extends StatelessWidget {
child: ThemeSwitcherClipper(
isDarkMode: AppSettings.isDarkMode,
onTap: (bool newMode) async {
Get.changeThemeMode(newMode ? ThemeMode.dark : ThemeMode.light);
Get.changeThemeMode(
newMode ? ThemeMode.dark : ThemeMode.light);
AppSettings.isDarkMode = newMode;
await SelectedTheme.saveMode(AppSettings.isDarkMode);
// Get.back();
homeController.initLanguageAndDarkMode();
Get.changeTheme(AppSettings.isDarkMode ? darkTheme : lightTheme);
Get.changeTheme(
AppSettings.isDarkMode ? darkTheme : lightTheme);
},
child: Icon(
tColors.icons,
Expand All @@ -84,11 +86,7 @@ class NavDrawer extends StatelessWidget {
currentLanguage: homeController.selectedLanguage.value,
).sentences.ccsyncCredentials,
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => ManageTaskChampionCreds(),
),
);
Get.toNamed(Routes.MANAGE_TASK_CHAMPION_CREDS);
},
),
),
Expand Down Expand Up @@ -245,7 +243,8 @@ class NavDrawer extends StatelessWidget {
}

Future<void> _showExitConfirmationDialog(BuildContext context) async {
TaskwarriorColorTheme tColors = Theme.of(context).extension<TaskwarriorColorTheme>()!;
TaskwarriorColorTheme tColors =
Theme.of(context).extension<TaskwarriorColorTheme>()!;
return showDialog<void>(
context: context,
barrierDismissible:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:get/get.dart';

import '../controllers/manage_task_champion_creds_controller.dart';

class ManageTaskChampionCredsBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<ManageTaskChampionCredsController>(
() => ManageTaskChampionCredsController(),
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';

class ManageTaskChampionCredsController extends GetxController {
final encryptionSecretController = TextEditingController();
final clientIdController = TextEditingController();
final ccsyncBackendUrlController = TextEditingController();

@override
void onInit() {
super.onInit();
loadCredentials();
}

Future<void> loadCredentials() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
encryptionSecretController.text = prefs.getString('encryptionSecret') ?? '';
clientIdController.text = prefs.getString('clientId') ?? '';
ccsyncBackendUrlController.text = prefs.getString('ccsyncBackendUrl') ?? '';
}

Future<void> saveCredentials() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('encryptionSecret', encryptionSecretController.text);
await prefs.setString('clientId', clientIdController.text);
await prefs.setString('ccsyncBackendUrl', ccsyncBackendUrlController.text);
}

@override
void onClose() {
encryptionSecretController.dispose();
clientIdController.dispose();
ccsyncBackendUrlController.dispose();
super.onClose();
}
}
Original file line number Diff line number Diff line change
@@ -1,47 +1,21 @@
// ignore_for_file: use_build_context_synchronously

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:taskwarrior/app/utils/constants/taskwarrior_colors.dart';
import 'package:taskwarrior/app/utils/constants/taskwarrior_fonts.dart';
import 'package:taskwarrior/app/utils/constants/constants.dart';
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';

import 'package:url_launcher/url_launcher.dart';
import '../controllers/manage_task_champion_creds_controller.dart';

class ManageTaskChampionCreds extends StatelessWidget {
final TextEditingController _encryptionSecretController =
TextEditingController();
final TextEditingController _clientIdController = TextEditingController();
final TextEditingController _ccsyncBackendUrlController =
TextEditingController();

ManageTaskChampionCreds({super.key}) {
_loadCredentials();
}

Future<void> _loadCredentials() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
_encryptionSecretController.text =
prefs.getString('encryptionSecret') ?? '';
_clientIdController.text = prefs.getString('clientId') ?? '';
_ccsyncBackendUrlController.text = prefs.getString('ccsyncBackendUrl') ?? '';
}

Future<void> _saveCredentials(BuildContext context) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('encryptionSecret', _encryptionSecretController.text);
await prefs.setString('clientId', _clientIdController.text);
await prefs.setString('ccsyncBackendUrl', _ccsyncBackendUrlController.text);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Credentials saved successfully')),
);
}
class ManageTaskChampionCredsView
extends GetView<ManageTaskChampionCredsController> {
const ManageTaskChampionCredsView({super.key});

@override
Widget build(BuildContext context) {
debugPrint("Built ManageTaskChampionCredsView");
TaskwarriorColorTheme tColors =
Theme.of(context).extension<TaskwarriorColorTheme>()!;

return Scaffold(
appBar: AppBar(
backgroundColor: TaskWarriorColors.kprimaryBackgroundColor,
Expand Down Expand Up @@ -72,8 +46,9 @@ class ManageTaskChampionCreds extends StatelessWidget {
},
),
],
leading: BackButton(
color: TaskWarriorColors.white,
leading: IconButton(
icon: Icon(Icons.arrow_back, color: TaskWarriorColors.white),
onPressed: () => Get.back(),
),
),
backgroundColor: tColors.primaryBackgroundColor,
Expand All @@ -87,49 +62,45 @@ class ManageTaskChampionCreds extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
style: TextStyle(
color: tColors.primaryTextColor,
),
controller: _encryptionSecretController,
style: TextStyle(color: tColors.primaryTextColor),
controller: controller.encryptionSecretController,
decoration: InputDecoration(
labelText: 'Encryption Secret',
labelStyle: TextStyle(
color: tColors.primaryTextColor,
),
labelStyle: TextStyle(color: tColors.primaryTextColor),
border: const OutlineInputBorder(),
),
),
const SizedBox(height: 10),
TextField(
style: TextStyle(
color: tColors.primaryTextColor,
),
controller: _clientIdController,
style: TextStyle(color: tColors.primaryTextColor),
controller: controller.clientIdController,
decoration: InputDecoration(
labelText: 'Client ID',
labelStyle: TextStyle(
color: tColors.primaryTextColor,
),
labelStyle: TextStyle(color: tColors.primaryTextColor),
border: const OutlineInputBorder(),
),
),
const SizedBox(height: 10),
TextField(
style: TextStyle(
color: tColors.primaryTextColor,
),
controller: _ccsyncBackendUrlController,
style: TextStyle(color: tColors.primaryTextColor),
controller: controller.ccsyncBackendUrlController,
decoration: InputDecoration(
labelText: 'CCSync Backend URL',
labelStyle: TextStyle(
color: tColors.primaryTextColor,
),
labelStyle: TextStyle(color: tColors.primaryTextColor),
border: const OutlineInputBorder(),
),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () => _saveCredentials(context),
onPressed: () async {
await controller.saveCredentials();
Get.snackbar(
'Success',
'Credentials saved successfully',
snackPosition: SnackPosition.BOTTOM,
duration: Duration(seconds: 2),
);
},
child: const Text('Save Credentials'),
),
const SizedBox(height: 10),
Expand Down
12 changes: 9 additions & 3 deletions lib/app/routes/app_pages.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
// ignore_for_file: constant_identifier_names

import 'package:get/get.dart';

import '../modules/about/bindings/about_binding.dart';
import '../modules/about/views/about_view.dart';

import '../modules/detailRoute/bindings/detail_route_binding.dart';
import '../modules/detailRoute/views/detail_route_view.dart';
import '../modules/home/bindings/home_binding.dart';
import '../modules/home/views/home_view.dart';
import '../modules/manageTaskServer/bindings/manage_task_server_binding.dart';
import '../modules/manageTaskServer/views/manage_task_server_view.dart';
import '../modules/manage_task_champion_creds/bindings/manage_task_champion_creds_binding.dart';
import '../modules/manage_task_champion_creds/views/manage_task_champion_creds_view.dart';
import '../modules/onboarding/bindings/onboarding_binding.dart';
import '../modules/onboarding/views/onboarding_view.dart';
import '../modules/permission/bindings/permission_binding.dart';
Expand All @@ -24,6 +23,8 @@ import '../modules/settings/views/settings_view.dart';
import '../modules/splash/bindings/splash_binding.dart';
import '../modules/splash/views/splash_view.dart';

// ignore_for_file: constant_identifier_names

part 'app_routes.dart';

class AppPages {
Expand Down Expand Up @@ -82,5 +83,10 @@ class AppPages {
page: () => const PermissionView(),
binding: PermissionBinding(),
),
GetPage(
name: _Paths.MANAGE_TASK_CHAMPION_CREDS,
page: () => const ManageTaskChampionCredsView(),
binding: ManageTaskChampionCredsBinding(),
),
];
}
2 changes: 2 additions & 0 deletions lib/app/routes/app_routes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ abstract class Routes {
static const REPORTS = _Paths.REPORTS;
static const SETTINGS = _Paths.SETTINGS;
static const PERMISSION = _Paths.PERMISSION;
static const MANAGE_TASK_CHAMPION_CREDS = _Paths.MANAGE_TASK_CHAMPION_CREDS;
}

abstract class _Paths {
Expand All @@ -29,4 +30,5 @@ abstract class _Paths {
static const REPORTS = '/reports';
static const SETTINGS = '/settings';
static const PERMISSION = '/permission';
static const MANAGE_TASK_CHAMPION_CREDS = '/manage-task-champion-creds';
}
Loading