diff --git a/core/lib/presentation/views/text/text_field_builder.dart b/core/lib/presentation/views/text/text_field_builder.dart index 78219f137..dbbc70eed 100644 --- a/core/lib/presentation/views/text/text_field_builder.dart +++ b/core/lib/presentation/views/text/text_field_builder.dart @@ -60,15 +60,13 @@ class _TextFieldBuilderState extends State { @override void initState() { + super.initState(); if (widget.fromValue != null) { _controller = TextEditingController.fromValue(TextEditingValue(text: widget.fromValue!)); - } else if (widget.controller != null) { - _controller = widget.controller!; } else { - _controller = TextEditingController(); + _controller = widget.controller ?? TextEditingController(); } _textDirection = widget.textDirection; - super.initState(); } @override diff --git a/core/lib/presentation/views/text/type_ahead_form_field_builder.dart b/core/lib/presentation/views/text/type_ahead_form_field_builder.dart index da5a46d56..7fa7363a5 100644 --- a/core/lib/presentation/views/text/type_ahead_form_field_builder.dart +++ b/core/lib/presentation/views/text/type_ahead_form_field_builder.dart @@ -58,9 +58,9 @@ class _TypeAheadFormFieldBuilderState extends State(); final languageCacheManager = Get.find(); diff --git a/lib/features/base/base_mailbox_controller.dart b/lib/features/base/base_mailbox_controller.dart index ed8018932..9ab2cdf10 100644 --- a/lib/features/base/base_mailbox_controller.dart +++ b/lib/features/base/base_mailbox_controller.dart @@ -41,6 +41,7 @@ import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_na import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; @@ -378,32 +379,17 @@ abstract class BaseMailboxController extends BaseController { mailboxIdSelected: mailboxSelected.id ); - if (PlatformInfo.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - onMovingMailboxAction( - mailboxSelected, - destinationMailbox == PresentationMailbox.unifiedMailbox - ? null - : destinationMailbox - ); - } - ); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); + final destinationMailbox = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments) + : await push(AppRoutes.destinationPicker, arguments: arguments); - if (destinationMailbox is PresentationMailbox) { - onMovingMailboxAction( - mailboxSelected, - destinationMailbox == PresentationMailbox.unifiedMailbox - ? null - : destinationMailbox - ); - } + if (destinationMailbox is PresentationMailbox) { + onMovingMailboxAction( + mailboxSelected, + destinationMailbox == PresentationMailbox.unifiedMailbox + ? null + : destinationMailbox + ); } } } diff --git a/lib/features/base/mixin/view_as_dialog_action_mixin.dart b/lib/features/base/mixin/view_as_dialog_action_mixin.dart deleted file mode 100644 index 413852b7a..000000000 --- a/lib/features/base/mixin/view_as_dialog_action_mixin.dart +++ /dev/null @@ -1,168 +0,0 @@ - -import 'package:flutter/material.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; -import 'package:model/mailbox/presentation_mailbox.dart'; -import 'package:tmail_ui_user/features/contact/presentation/contact_bindings.dart'; -import 'package:tmail_ui_user/features/contact/presentation/contact_view.dart'; -import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart'; -import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_bindings.dart'; -import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_view.dart'; -import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; -import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart'; -import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart'; -import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart'; -import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_bindings.dart'; -import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart'; -import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart'; -import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart'; -import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart'; -import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart'; -import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart'; -import 'package:tmail_ui_user/main/routes/route_navigation.dart'; - -mixin ViewAsDialogActionMixin { - - void showDialogDestinationPicker({ - required BuildContext context, - required DestinationPickerArguments arguments, - required Function(PresentationMailbox) onSelectedMailbox - }) { - DestinationPickerBindings().dependencies(); - - showGeneralDialog( - context: context, - barrierDismissible: true, - barrierLabel: '', - barrierColor: Colors.black.withAlpha(24), - pageBuilder: (context, animation, secondaryAnimation) { - return DestinationPickerView.fromArguments( - arguments, - onDismissCallback: () { - DestinationPickerBindings().dispose(); - popBack(); - }, - onSelectedMailboxCallback: (destinationMailbox) { - DestinationPickerBindings().dispose(); - popBack(); - - if (destinationMailbox is PresentationMailbox) { - onSelectedMailbox.call(destinationMailbox); - } - }); - }); - } - - void showDialogMailboxCreator({ - required BuildContext context, - required MailboxCreatorArguments arguments, - required Function(NewMailboxArguments) onCreatedMailbox - }) { - MailboxCreatorBindings().dependencies(); - - showGeneralDialog( - context: context, - barrierDismissible: true, - barrierLabel: '', - barrierColor: Colors.black.withAlpha(24), - pageBuilder: (context, animation, secondaryAnimation) { - return MailboxCreatorView.fromArguments( - arguments, - onDismissCallback: () { - MailboxCreatorBindings().dispose(); - popBack(); - }, - onCreatedMailboxCallback: (arguments) { - MailboxCreatorBindings().dispose(); - popBack(); - - if (arguments is NewMailboxArguments) { - onCreatedMailbox.call(arguments); - } - }); - }); - } - - void showDialogContactView({ - required BuildContext context, - required ContactArguments arguments, - required Function(EmailAddress) onSelectedContact - }) { - ContactBindings().dependencies(); - - showGeneralDialog( - context: context, - barrierDismissible: true, - barrierLabel: '', - barrierColor: Colors.black.withAlpha(24), - pageBuilder: (context, animation, secondaryAnimation) { - return ContactView.fromArguments( - arguments, - onDismissCallback: () { - ContactBindings().dispose(); - popBack(); - }, - onSelectedContactCallback: (emailAddress) { - ContactBindings().dispose(); - popBack(); - - onSelectedContact.call(emailAddress); - }); - }); - } - - void showDialogIdentityCreator({ - required BuildContext context, - required IdentityCreatorArguments arguments, - required Function(dynamic) onCreatedIdentity - }) { - IdentityCreatorBindings().dependencies(); - - showGeneralDialog( - context: context, - barrierDismissible: true, - barrierLabel: '', - barrierColor: Colors.black.withAlpha(24), - pageBuilder: (context, animation, secondaryAnimation) { - return IdentityCreatorView.fromArguments( - arguments, - onDismissCallback: () { - IdentityCreatorBindings().dispose(); - popBack(); - }, - onCreatedIdentityCallback: (args) { - IdentityCreatorBindings().dispose(); - popBack(); - - onCreatedIdentity.call(args); - }); - }); - } - - void showDialogRuleFilterCreator({ - required BuildContext context, - required RulesFilterCreatorArguments arguments, - required Function(dynamic) onCreatedRuleFilter - }) { - RulesFilterCreatorBindings().dependencies(); - - showGeneralDialog( - context: context, - barrierDismissible: true, - barrierLabel: '', - barrierColor: Colors.black.withAlpha(24), - pageBuilder: (context, animation, secondaryAnimation) { - return RuleFilterCreatorView.fromArguments( - arguments, - onDismissCallback: () { - RulesFilterCreatorBindings().dispose(); - popBack(); - }, - onCreatedRuleFilterCallback: (args) { - RulesFilterCreatorBindings().dispose(); - popBack(); - - onCreatedRuleFilter.call(args); - }); - }); - } -} \ No newline at end of file diff --git a/lib/features/contact/presentation/contact_controller.dart b/lib/features/contact/presentation/contact_controller.dart index f22244fd4..d55a63001 100644 --- a/lib/features/contact/presentation/contact_controller.dart +++ b/lib/features/contact/presentation/contact_controller.dart @@ -22,8 +22,8 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class ContactController extends BaseController { - TextEditingController? textInputSearchController; - FocusNode? textInputSearchFocus; + final TextEditingController textInputSearchController = TextEditingController(); + final FocusNode textInputSearchFocus = FocusNode(); ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact; final searchQuery = SearchQuery.initial().obs; @@ -32,9 +32,9 @@ class ContactController extends BaseController { GetAutoCompleteWithDeviceContactInteractor? _getAutoCompleteWithDeviceContactInteractor; GetAutoCompleteInteractor? _getAutoCompleteInteractor; - late Debouncer _deBouncerTime; - late AccountId _accountId; - late Session _session; + final Debouncer _deBouncerTime = Debouncer(const Duration(milliseconds: 500), initialValue: ''); + AccountId? _accountId; + Session? _session; ContactArguments? arguments; EmailAddress? contactSelected; @@ -44,14 +44,19 @@ class ContactController extends BaseController { @override void onInit() { super.onInit(); - textInputSearchController = TextEditingController(); - textInputSearchFocus = FocusNode(); - _initializeDebounceTimeTextSearchChange(); + log('ContactController::onInit():arguments: ${Get.arguments}'); + arguments = Get.arguments; + _deBouncerTime.values.listen((value) { + searchQuery.value = SearchQuery(value); + _searchContactByNameOrEmail(searchQuery.value.value); + }); } @override void onReady() async { - textInputSearchFocus?.requestFocus(); + super.onReady(); + log('ContactController::onReady():'); + textInputSearchFocus.requestFocus(); if (arguments != null) { _accountId = arguments!.accountId; _session = arguments!.session; @@ -68,25 +73,17 @@ class ContactController extends BaseController { const Duration(milliseconds: 500), () => _checkContactPermission()); } - super.onReady(); } @override void onClose() { - _disposeWidget(); + log('ContactController::onClose():'); + textInputSearchFocus.dispose(); + textInputSearchController.dispose(); + _deBouncerTime.cancel(); super.onClose(); } - void _initializeDebounceTimeTextSearchChange() { - _deBouncerTime = Debouncer( - const Duration(milliseconds: 500), - initialValue: ''); - _deBouncerTime.values.listen((value) async { - searchQuery.value = SearchQuery(value); - _searchContactByNameOrEmail(searchQuery.value.value); - }); - } - void onTextSearchChange(String text) { _deBouncerTime.value = text; } @@ -96,9 +93,9 @@ class ContactController extends BaseController { } void clearAllTextInputSearchForm() { - textInputSearchController?.clear(); + textInputSearchController.clear(); searchQuery.value = SearchQuery.initial(); - textInputSearchFocus?.requestFocus(); + textInputSearchFocus.requestFocus(); } void _checkContactPermission() async { @@ -167,32 +164,14 @@ class ContactController extends BaseController { } } - void _disposeWidget() { - textInputSearchFocus?.dispose(); - textInputSearchFocus = null; - textInputSearchController?.dispose(); - textInputSearchController = null; - _deBouncerTime.cancel(); - } - void selectContact(BuildContext context, EmailAddress emailAddress) { KeyboardUtils.hideKeyboard(context); - - if (PlatformInfo.isWeb) { - onSelectedContactCallback?.call(emailAddress); - } else { - popBack(result: emailAddress); - } + popBack(result: emailAddress); } void closeContactView(BuildContext context) { clearAllTextInputSearchForm(); KeyboardUtils.hideKeyboard(context); - - if (PlatformInfo.isWeb) { - onDismissContactView?.call(); - } else { - popBack(); - } + popBack(); } } \ No newline at end of file diff --git a/lib/features/contact/presentation/contact_view.dart b/lib/features/contact/presentation/contact_view.dart index 66b4821f1..806470e82 100644 --- a/lib/features/contact/presentation/contact_view.dart +++ b/lib/features/contact/presentation/contact_view.dart @@ -8,7 +8,6 @@ import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/suggestion_email_address.dart'; import 'package:tmail_ui_user/features/contact/presentation/contact_controller.dart'; -import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart'; import 'package:tmail_ui_user/features/contact/presentation/utils/contact_utils.dart'; import 'package:tmail_ui_user/features/contact/presentation/widgets/app_bar_contact_widget.dart'; import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_suggestion_box_item.dart'; @@ -20,23 +19,7 @@ class ContactView extends GetWidget { final _responsiveUtils = Get.find(); final _imagePaths = Get.find(); - @override - final controller = Get.find(); - - ContactView({Key? key}) : super(key: key) { - controller.arguments = Get.arguments; - } - - ContactView.fromArguments( - ContactArguments arguments, { - Key? key, - SelectedContactCallbackAction? onSelectedContactCallback, - VoidCallback? onDismissCallback - }) : super(key: key) { - controller.arguments = arguments; - controller.onSelectedContactCallback = onSelectedContactCallback; - controller.onDismissContactView = onDismissCallback; - } + ContactView({super.key}); @override Widget build(BuildContext context) { @@ -82,7 +65,7 @@ class ContactView extends GetWidget { imagePaths: _imagePaths, searchQuery: controller.searchQuery.value, searchFocusNode: controller.textInputSearchFocus, - searchInputController :controller.textInputSearchController, + searchInputController: controller.textInputSearchController, hasBackButton: false, hasSearchButton: true, padding: EdgeInsets.zero, diff --git a/lib/features/destination_picker/presentation/destination_picker_bindings.dart b/lib/features/destination_picker/presentation/destination_picker_bindings.dart index ac769a771..33012ec86 100644 --- a/lib/features/destination_picker/presentation/destination_picker_bindings.dart +++ b/lib/features/destination_picker/presentation/destination_picker_bindings.dart @@ -104,8 +104,4 @@ class DestinationPickerBindings extends BaseBindings { Get.find(), )); } - - void dispose() { - Get.delete(); - } } \ No newline at end of file diff --git a/lib/features/destination_picker/presentation/destination_picker_controller.dart b/lib/features/destination_picker/presentation/destination_picker_controller.dart index 475c1a35a..410c7111f 100644 --- a/lib/features/destination_picker/presentation/destination_picker_controller.dart +++ b/lib/features/destination_picker/presentation/destination_picker_controller.dart @@ -3,7 +3,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/app_toast.dart'; import 'package:core/presentation/utils/keyboard_utils.dart'; -import 'package:core/utils/platform_info.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; @@ -41,8 +41,6 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:uuid/uuid.dart'; -typedef OnSelectedMailboxCallback = Function(PresentationMailbox? destinationMailbox); - class DestinationPickerController extends BaseMailboxController { final _uuid = Get.find(); @@ -59,19 +57,16 @@ class DestinationPickerController extends BaseMailboxController { final mailboxDestination = Rxn(); final newNameMailbox = Rxn(); - FocusNode? nameInputFocusNode; - TextEditingController? nameInputController; - TextEditingController? searchInputController; - FocusNode? searchFocus; DestinationPickerArguments? arguments; Session? _session; AccountId? accountId; MailboxId? mailboxIdSelected; - OnSelectedMailboxCallback? onSelectedMailboxCallback; - VoidCallback? onDismissDestinationPicker; List listMailboxNameAsStringExist = []; - + final FocusNode nameInputFocusNode = FocusNode(); + final FocusNode searchFocus = FocusNode(); + final TextEditingController nameInputController = TextEditingController(); + final TextEditingController searchInputController = TextEditingController(); final destinationListScrollController = ScrollController(); DestinationPickerController( @@ -91,17 +86,14 @@ class DestinationPickerController extends BaseMailboxController { @override void onInit() { super.onInit(); - nameInputFocusNode = FocusNode(); - nameInputController = TextEditingController(); - searchInputController = TextEditingController(); - searchFocus = FocusNode(); - searchFocus?.unfocus(); - nameInputFocusNode?.unfocus(); + log('DestinationPickerController::onInit():arguments: ${Get.arguments}'); + arguments = Get.arguments; } @override void onReady() { super.onReady(); + log('DestinationPickerController::onReady():'); if (arguments != null) { mailboxAction.value = arguments!.mailboxAction; mailboxIdSelected = arguments!.mailboxIdSelected; @@ -143,7 +135,11 @@ class DestinationPickerController extends BaseMailboxController { @override void onClose() { - _disposeWidget(); + log('DestinationPickerController::onClose():'); + nameInputFocusNode.dispose(); + nameInputController.dispose(); + searchFocus.dispose(); + searchInputController.dispose(); destinationListScrollController.dispose(); super.onClose(); } @@ -199,7 +195,7 @@ class DestinationPickerController extends BaseMailboxController { String? getErrorInputNameString(BuildContext context) { final nameMailbox = newNameMailbox.value; - if (nameInputFocusNode?.hasFocus == false && nameMailbox == null) { + if (nameInputFocusNode.hasFocus == false && nameMailbox == null) { return null; } @@ -224,7 +220,7 @@ class DestinationPickerController extends BaseMailboxController { bool isCreateMailboxValidated(BuildContext context) { final nameValidated = getErrorInputNameString(context); - if (nameInputFocusNode?.hasFocus == false && newNameMailbox.value == null) { + if (nameInputFocusNode.hasFocus == false && newNameMailbox.value == null) { return false; } @@ -265,13 +261,13 @@ class DestinationPickerController extends BaseMailboxController { listMailboxSearched.clear(); searchState.value = searchState.value.disableSearchState(); searchQuery.value = SearchQuery.initial(); - searchInputController?.clear(); + searchInputController.clear(); KeyboardUtils.hideKeyboard(context); } void clearSearchText() { searchQuery.value = SearchQuery.initial(); - searchFocus?.requestFocus(); + searchFocus.requestFocus(); listMailboxSearched.clear(); } @@ -377,12 +373,7 @@ class DestinationPickerController extends BaseMailboxController { AppLocalizations.of(context).toastMessageErrorNotSelectedFolderWhenCreateNewMailbox); return; } - - if (PlatformInfo.isWeb) { - onSelectedMailboxCallback?.call(mailboxDestination.value); - } else { - popBack(result: mailboxDestination.value); - } + popBack(result: mailboxDestination.value); } void createNewMailboxAction(BuildContext context) { @@ -408,29 +399,13 @@ class DestinationPickerController extends BaseMailboxController { } void backToDestinationScreen(BuildContext context) { - nameInputController?.clear(); + nameInputController.clear(); KeyboardUtils.hideKeyboard(context); destinationScreenType.value = DestinationScreenType.destinationPicker; } - void _disposeWidget() { - nameInputFocusNode?.dispose(); - nameInputFocusNode = null; - nameInputController?.dispose(); - nameInputController = null; - searchFocus?.dispose(); - searchFocus = null; - searchInputController?.dispose(); - searchInputController = null; - } - void closeDestinationPicker(BuildContext context) { KeyboardUtils.hideKeyboard(context); - - if (PlatformInfo.isWeb) { - onDismissDestinationPicker?.call(); - } else { - popBack(); - } + popBack(); } } \ No newline at end of file diff --git a/lib/features/destination_picker/presentation/destination_picker_view.dart b/lib/features/destination_picker/presentation/destination_picker_view.dart index 24e796d98..5fe14b7b5 100644 --- a/lib/features/destination_picker/presentation/destination_picker_view.dart +++ b/lib/features/destination_picker/presentation/destination_picker_view.dart @@ -19,7 +19,6 @@ import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart'; -import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart'; @@ -45,20 +44,7 @@ class DestinationPickerView extends GetWidget @override final controller = Get.find(); - DestinationPickerView({Key? key}) : super(key: key) { - controller.arguments = Get.arguments; - } - - DestinationPickerView.fromArguments( - DestinationPickerArguments arguments, { - Key? key, - OnSelectedMailboxCallback? onSelectedMailboxCallback, - VoidCallback? onDismissCallback - }) : super(key: key) { - controller.arguments = arguments; - controller.onSelectedMailboxCallback = onSelectedMailboxCallback; - controller.onDismissDestinationPicker = onDismissCallback; - } + DestinationPickerView({super.key}); @override Widget build(BuildContext context) { diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 7ffa2a325..30297f50b 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -68,6 +68,7 @@ import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants. import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/navigation_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_utils.dart'; @@ -678,39 +679,23 @@ class SingleEmailController extends BaseController with AppLoaderMixin { session, mailboxIdSelected: currentMailbox.mailboxId ); - if (PlatformInfo.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - if (mailboxDashBoardController.sessionCurrent != null) { - _dispatchMoveToAction( - context, - accountId, - mailboxDashBoardController.sessionCurrent!, - email, - currentMailbox, - destinationMailbox); - } - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); - if (destinationMailbox != null && + final destinationMailbox = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments) + : await push(AppRoutes.destinationPicker, arguments: arguments); + + if (destinationMailbox != null && destinationMailbox is PresentationMailbox && mailboxDashBoardController.sessionCurrent != null && context.mounted - ) { - _dispatchMoveToAction( - context, - accountId, - mailboxDashBoardController.sessionCurrent!, - email, - currentMailbox, - destinationMailbox); - } + ) { + _dispatchMoveToAction( + context, + accountId, + mailboxDashBoardController.sessionCurrent!, + email, + currentMailbox, + destinationMailbox); } } } @@ -1182,25 +1167,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin { session, emailAddress: emailAddress); - if (PlatformInfo.isWeb) { - showDialogRuleFilterCreator( - context: context, - arguments: arguments, - onCreatedRuleFilter: (arguments) { - if (arguments is CreateNewEmailRuleFilterRequest) { - _createNewRuleFilterAction(accountId, arguments); - } - } - ); - } else { - final newRuleFilterRequest = await push( - AppRoutes.rulesFilterCreator, - arguments: arguments - ); + final newRuleFilterRequest = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments) + : await push(AppRoutes.rulesFilterCreator, arguments: arguments); - if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) { - _createNewRuleFilterAction(accountId, newRuleFilterRequest); - } + if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) { + _createNewRuleFilterAction(accountId, newRuleFilterRequest); } } } diff --git a/lib/features/identity_creator/presentation/identity_creator_bindings.dart b/lib/features/identity_creator/presentation/identity_creator_bindings.dart index 21916ad54..390d3a85a 100644 --- a/lib/features/identity_creator/presentation/identity_creator_bindings.dart +++ b/lib/features/identity_creator/presentation/identity_creator_bindings.dart @@ -18,8 +18,4 @@ class IdentityCreatorBindings extends Bindings { Get.find() )); } - - void dispose() { - Get.delete(); - } } \ No newline at end of file diff --git a/lib/features/identity_creator/presentation/identity_creator_controller.dart b/lib/features/identity_creator/presentation/identity_creator_controller.dart index 02e30e993..97876538c 100644 --- a/lib/features/identity_creator/presentation/identity_creator_controller.dart +++ b/lib/features/identity_creator/presentation/identity_creator_controller.dart @@ -5,10 +5,7 @@ import 'package:core/presentation/state/success.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/platform_info.dart'; import 'package:flutter/cupertino.dart'; -import 'package:get/get_core/get_core.dart'; -import 'package:get/get_instance/get_instance.dart'; -import 'package:get/get_rx/get_rx.dart'; -import 'package:html_editor_enhanced/html_editor.dart'; +import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; @@ -40,8 +37,6 @@ import 'package:tmail_ui_user/main/error/capability_validator.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:uuid/uuid.dart'; -typedef OnCreatedIdentityCallback = Function(dynamic arguments); - class IdentityCreatorController extends BaseController { final VerifyNameInteractor _verifyNameInteractor; @@ -62,13 +57,13 @@ class IdentityCreatorController extends BaseController { final isDefaultIdentity = RxBool(false); final isDefaultIdentitySupported = RxBool(false); - late RichTextController keyboardRichTextController; - late RichTextWebController richTextWebController; - late HtmlEditorController signatureHtmlEditorController; - TextEditingController? inputNameIdentityController; - TextEditingController? inputBccIdentityController; - FocusNode? inputNameIdentityFocusNode; - FocusNode? inputBccIdentityFocusNode; + final RichTextController keyboardRichTextController = RichTextController(); + final RichTextWebController richTextWebController = RichTextWebController(); + final TextEditingController inputNameIdentityController = TextEditingController(); + final TextEditingController inputBccIdentityController = TextEditingController(); + final FocusNode inputNameIdentityFocusNode = FocusNode(); + final FocusNode inputBccIdentityFocusNode = FocusNode(); + final ScrollController scrollController = ScrollController(); String? _nameIdentity; String? _contentHtmlEditor; @@ -77,9 +72,6 @@ class IdentityCreatorController extends BaseController { UserProfile? userProfile; Identity? identity; IdentityCreatorArguments? arguments; - OnCreatedIdentityCallback? onCreatedIdentityCallback; - VoidCallback? onDismissIdentityCreator; - ScrollController? scrollController; final GlobalKey htmlKey = GlobalKey(); final htmlEditorMinHeight = 160; @@ -107,21 +99,15 @@ class IdentityCreatorController extends BaseController { @override void onInit() { - log('IdentityCreatorController::onInit():'); super.onInit(); - keyboardRichTextController = RichTextController(); - richTextWebController = RichTextWebController(); - signatureHtmlEditorController = HtmlEditorController(processNewLineAsBr: true); - inputNameIdentityController = TextEditingController(); - inputBccIdentityController = TextEditingController(); - inputNameIdentityFocusNode = FocusNode(); - inputBccIdentityFocusNode = FocusNode(); - scrollController = ScrollController(); + log('IdentityCreatorController::onInit():arguments: ${Get.arguments}'); + arguments = Get.arguments; } @override void onReady() { super.onReady(); + log('IdentityCreatorController::onReady():'); if (arguments != null) { accountId = arguments!.accountId; session = arguments!.session; @@ -136,7 +122,14 @@ class IdentityCreatorController extends BaseController { @override void onClose() { - _disposeWidget(); + log('IdentityCreatorController::onClose():'); + keyboardRichTextController.dispose(); + inputNameIdentityFocusNode.dispose(); + inputBccIdentityFocusNode.dispose(); + inputNameIdentityController.dispose(); + inputBccIdentityController.dispose(); + scrollController.dispose(); + richTextWebController.onClose(); super.onClose(); } @@ -164,12 +157,12 @@ class IdentityCreatorController extends BaseController { void _setUpValueFromIdentity() { _nameIdentity = identity?.name ?? ''; - inputNameIdentityController?.text = identity?.name ?? ''; + inputNameIdentityController.text = identity?.name ?? ''; if (identity?.signatureAsString.isNotEmpty == true) { updateContentHtmlEditor(arguments?.identity?.signatureAsString ?? ''); if (PlatformInfo.isWeb) { - signatureHtmlEditorController.setText(arguments?.identity?.signatureAsString ?? ''); + richTextWebController.editorController.setText(arguments?.identity?.signatureAsString ?? ''); } } } @@ -236,7 +229,7 @@ class IdentityCreatorController extends BaseController { if (identity?.bcc?.isNotEmpty == true) { bccOfIdentity.value = identity?.bcc!.first; - inputBccIdentityController?.text = identity?.bcc!.first.emailAddress ?? ''; + inputBccIdentityController.text = identity?.bcc!.first.emailAddress ?? ''; } else { bccOfIdentity.value = null; } @@ -297,7 +290,7 @@ class IdentityCreatorController extends BaseController { Future _getSignatureHtmlText() async { if (PlatformInfo.isWeb) { - return signatureHtmlEditorController.getText(); + return richTextWebController.editorController.getText(); } else { return keyboardRichTextController.htmlEditorApi?.getText(); } @@ -346,25 +339,14 @@ class IdentityCreatorController extends BaseController { final identityRequest = CreateNewIdentityRequest( generateCreateId, newIdentity, - isDefaultIdentity: isDefaultIdentity.value - ); - - if (PlatformInfo.isWeb) { - onCreatedIdentityCallback?.call(identityRequest); - } else { - popBack(result: identityRequest); - } + isDefaultIdentity: isDefaultIdentity.value); + popBack(result: identityRequest); } else { final identityRequest = EditIdentityRequest( - identityId: identity!.id!, - identityRequest: newIdentity.toIdentityRequest(), - isDefaultIdentity: isDefaultIdentity.value); - - if (PlatformInfo.isWeb) { - onCreatedIdentityCallback?.call(identityRequest); - } else { - popBack(result: identityRequest); - } + identityId: identity!.id!, + identityRequest: newIdentity.toIdentityRequest(), + isDefaultIdentity: isDefaultIdentity.value); + popBack(result: identityRequest); } } @@ -389,7 +371,7 @@ class IdentityCreatorController extends BaseController { } String? _getErrorInputAddressString(BuildContext context, {String? value}) { - final emailAddress = value ?? inputBccIdentityController?.text ?? ''; + final emailAddress = value ?? inputBccIdentityController.text; if (emailAddress.trim().isEmpty) { return null; } @@ -434,24 +416,8 @@ class IdentityCreatorController extends BaseController { } void closeView(BuildContext context) { - if (PlatformInfo.isWeb) { - onDismissIdentityCreator?.call(); - } else { - popBack(); - } - } - - void _disposeWidget() { - keyboardRichTextController.dispose(); - inputNameIdentityFocusNode?.dispose(); - inputNameIdentityFocusNode = null; - inputBccIdentityFocusNode?.dispose(); - inputBccIdentityFocusNode = null; - inputNameIdentityController?.dispose(); - inputNameIdentityController = null; - inputBccIdentityController?.dispose(); - inputBccIdentityController = null; - scrollController?.dispose(); + clearFocusEditor(context); + popBack(); } void initRichTextForMobile(BuildContext context, HtmlEditorApi editorApi) { @@ -464,29 +430,27 @@ class IdentityCreatorController extends BaseController { } void _onFocusHTMLEditorOnMobile() async { - inputBccIdentityFocusNode?.unfocus(); - inputNameIdentityFocusNode?.unfocus(); - if (scrollController != null) { - if (htmlKey.currentContext != null) { - await Scrollable.ensureVisible(htmlKey.currentContext!); - } - await Future.delayed(const Duration(milliseconds: 500), () { - final offset = scrollController!.position.pixels + - defaultKeyboardToolbarHeight + - htmlEditorMinHeight; - scrollController!.animateTo( - offset, - duration: const Duration(milliseconds: 1), - curve: Curves.linear, - ); - }); + inputBccIdentityFocusNode.unfocus(); + inputNameIdentityFocusNode.unfocus(); + if (htmlKey.currentContext != null) { + await Scrollable.ensureVisible(htmlKey.currentContext!); } + await Future.delayed(const Duration(milliseconds: 500), () { + final offset = scrollController.position.pixels + + defaultKeyboardToolbarHeight + + htmlEditorMinHeight; + scrollController.animateTo( + offset, + duration: const Duration(milliseconds: 1), + curve: Curves.linear, + ); + }); } void _onEnterKeyDownOnMobile() { - if (scrollController != null && scrollController!.position.pixels < scrollController!.position.maxScrollExtent) { - scrollController!.animateTo( - scrollController!.position.pixels + 20, + if (scrollController.position.pixels < scrollController.position.maxScrollExtent) { + scrollController.animateTo( + scrollController.position.pixels + 20, duration: const Duration(milliseconds: 1), curve: Curves.linear, ); diff --git a/lib/features/identity_creator/presentation/identity_creator_view.dart b/lib/features/identity_creator/presentation/identity_creator_view.dart index ffbf52295..2fd22280e 100644 --- a/lib/features/identity_creator/presentation/identity_creator_view.dart +++ b/lib/features/identity_creator/presentation/identity_creator_view.dart @@ -20,7 +20,6 @@ import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/toolbar_rich_text_builder.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_controller.dart'; -import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_drop_list_field_builder.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_field_no_editable_builder.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_input_field_builder.dart'; @@ -39,20 +38,7 @@ class IdentityCreatorView extends GetWidget { @override final controller = Get.find(); - IdentityCreatorView({Key? key}) : super(key: key) { - controller.arguments = Get.arguments; - } - - IdentityCreatorView.fromArguments( - IdentityCreatorArguments arguments, { - Key? key, - OnCreatedIdentityCallback? onCreatedIdentityCallback, - VoidCallback? onDismissCallback - }) : super(key: key) { - controller.arguments = arguments; - controller.onCreatedIdentityCallback = onCreatedIdentityCallback; - controller.onDismissIdentityCreator = onDismissCallback; - } + IdentityCreatorView({super.key}); @override Widget build(BuildContext context) { @@ -133,27 +119,6 @@ class IdentityCreatorView extends GetWidget { )) ), ), - tabletLarge: Scaffold( - backgroundColor: Colors.black38, - body: GestureDetector( - onTap: () => controller.clearFocusEditor(context), - child: Center(child: Card( - color: Colors.transparent, - shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(16))), - child: Container( - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.all(Radius.circular(16))), - width: _responsiveUtils.getSizeScreenWidth(context) * 0.85, - height: _responsiveUtils.getSizeScreenHeight(context) * 0.6, - child: ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(16)), - child: _buildBodyMobile(context) - ) - ) - )) - ) - ), landscapeTablet: Scaffold( backgroundColor: Colors.black38, body: GestureDetector( @@ -245,7 +210,7 @@ class IdentityCreatorView extends GetWidget { controller.inputBccIdentityController, focusNode: PlatformInfo.isWeb ? null : controller.inputBccIdentityFocusNode, onSelectedSuggestionAction: (newEmailAddress) { - controller.inputBccIdentityController?.text = newEmailAddress?.email ?? ''; + controller.inputBccIdentityController.text = newEmailAddress?.email ?? ''; controller.updateBccOfIdentity(newEmailAddress); }, onChangeInputSuggestionAction: (pattern) { @@ -383,8 +348,8 @@ class IdentityCreatorView extends GetWidget { controller.updateContentHtmlEditor(changed); }, onInit: () { log('IdentityCreatorView::_buildHtmlEditorWeb(): onInit'); + controller.richTextWebController.editorController.setFullScreen(); controller.updateContentHtmlEditor(initContent); - controller.richTextWebController.setEnableCodeView(); }, onFocus: () { log('IdentityCreatorView::_buildHtmlEditorWeb(): onFocus'); FocusManager.instance.primaryFocus?.unfocus(); diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 67c89ecf4..d1251c93e 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -72,6 +72,7 @@ import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_emai import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/navigation_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_utils.dart'; @@ -477,29 +478,16 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM teamMailboxesTree.value, mailboxDashBoardController.sessionCurrent!); - if (PlatformInfo.isWeb) { - showDialogMailboxCreator( - context: context, - arguments: arguments, - onCreatedMailbox: (newMailboxArguments) { - final generateCreateId = Id(_uuid.v1()); - _createNewMailboxAction(session, accountId, CreateNewMailboxRequest( - generateCreateId, - newMailboxArguments.newName, - parentId: newMailboxArguments.mailboxLocation?.id)); - }); - } else { - final newMailboxArguments = await push( - AppRoutes.mailboxCreator, - arguments: arguments); + final result = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.mailboxCreator, arguments: arguments) + : await push(AppRoutes.mailboxCreator, arguments: arguments); - if (newMailboxArguments != null && newMailboxArguments is NewMailboxArguments) { - final generateCreateId = Id(_uuid.v1()); - _createNewMailboxAction(session, accountId, CreateNewMailboxRequest( - generateCreateId, - newMailboxArguments.newName, - parentId: newMailboxArguments.mailboxLocation?.id)); - } + if (result != null && result is NewMailboxArguments) { + final generateCreateId = Id(_uuid.v1()); + _createNewMailboxAction(session, accountId, CreateNewMailboxRequest( + generateCreateId, + result.newName, + parentId: result.mailboxLocation?.id)); } } } diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_bindings.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_bindings.dart index c7caed4d9..00f7a1e34 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_bindings.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_bindings.dart @@ -1,33 +1,12 @@ import 'package:get/get.dart'; -import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart'; -class MailboxCreatorBindings extends BaseBindings { +class MailboxCreatorBindings extends Bindings { @override - void bindingsController() { + void dependencies() { + Get.lazyPut(() => VerifyNameInteractor()); Get.lazyPut(() => MailboxCreatorController(Get.find())); } - - @override - void bindingsDataSource() {} - - @override - void bindingsDataSourceImpl() {} - - @override - void bindingsInteractor() { - Get.lazyPut(() => VerifyNameInteractor()); - } - - @override - void bindingsRepository() {} - - @override - void bindingsRepositoryImpl() {} - - void dispose() { - Get.delete(); - } } \ No newline at end of file diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart index 4712b0c31..25d7ffe01 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart @@ -19,10 +19,9 @@ import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/v import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; -typedef OnCreatedMailboxCallback = Function(NewMailboxArguments? arguments); - class MailboxCreatorController extends BaseController { final VerifyNameInteractor _verifyNameInteractor; @@ -31,8 +30,8 @@ class MailboxCreatorController extends BaseController { final newNameMailbox = Rxn(); bool _createdMailbox = false; - FocusNode? nameInputFocusNode; - TextEditingController? nameInputController; + final FocusNode nameInputFocusNode = FocusNode(); + final TextEditingController nameInputController = TextEditingController(); MailboxCreatorArguments? arguments; AccountId? accountId; @@ -40,8 +39,6 @@ class MailboxCreatorController extends BaseController { MailboxTree? defaultMailboxTree; MailboxTree? personalMailboxTree; MailboxTree? teamMailboxesTre; - OnCreatedMailboxCallback? onCreatedMailboxCallback; - VoidCallback? onDismissMailboxCreator; List listMailboxNameAsStringExist = []; @@ -52,13 +49,14 @@ class MailboxCreatorController extends BaseController { @override void onInit() { super.onInit(); - nameInputFocusNode = FocusNode(); - nameInputController = TextEditingController(); + log('MailboxCreatorController::onInit():arguments: ${Get.arguments}'); + arguments = Get.arguments; } @override void onReady() { super.onReady(); + log('MailboxCreatorController::onReady():'); if (arguments != null) { personalMailboxTree = arguments!.personalMailboxTree; defaultMailboxTree = arguments!.defaultMailboxTree; @@ -71,7 +69,9 @@ class MailboxCreatorController extends BaseController { @override void onClose() { - _disposeWidget(); + log('MailboxCreatorController::onClose():'); + nameInputFocusNode.dispose(); + nameInputController.dispose(); super.onClose(); } @@ -111,7 +111,7 @@ class MailboxCreatorController extends BaseController { String? getErrorInputNameString(BuildContext context) { final nameMailbox = newNameMailbox.value; - final canCheckNameString = _createdMailbox && nameInputFocusNode?.hasFocus == false; + final canCheckNameString = _createdMailbox && nameInputFocusNode.hasFocus == false; return _verifyNameInteractor.execute( nameMailbox, @@ -138,47 +138,26 @@ class MailboxCreatorController extends BaseController { if (accountId != null) { final arguments = DestinationPickerArguments( - accountId!, - MailboxActions.create, - _session, - mailboxIdSelected: selectedMailbox.value?.id); + accountId!, + MailboxActions.create, + _session, + mailboxIdSelected: selectedMailbox.value?.id); - if (PlatformInfo.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox - ? null - : destinationMailbox; + final destinationMailbox = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments) + : await push(AppRoutes.destinationPicker, arguments: arguments); - selectedMailbox.value = mailboxDestination; - _createListMailboxNameAsStringInMailboxLocation(); - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); + if (destinationMailbox is PresentationMailbox) { + final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox + ? null + : destinationMailbox; - if (destinationMailbox is PresentationMailbox) { - final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox - ? null - : destinationMailbox; - - selectedMailbox.value = mailboxDestination; - _createListMailboxNameAsStringInMailboxLocation(); - } + selectedMailbox.value = mailboxDestination; + _createListMailboxNameAsStringInMailboxLocation(); } } } - void _disposeWidget() { - nameInputFocusNode?.dispose(); - nameInputFocusNode = null; - nameInputController?.dispose(); - nameInputController = null; - } - void createNewMailbox(BuildContext context) { KeyboardUtils.hideKeyboard(context); @@ -191,24 +170,14 @@ class MailboxCreatorController extends BaseController { if (nameMailbox != null && nameMailbox.isNotEmpty && _createdMailbox) { final newMailboxArguments = NewMailboxArguments( - MailboxName(nameMailbox), - mailboxLocation: selectedMailbox.value); - - if (PlatformInfo.isWeb) { - onCreatedMailboxCallback?.call(newMailboxArguments); - } else { - popBack(result: newMailboxArguments); - } + MailboxName(nameMailbox), + mailboxLocation: selectedMailbox.value); + popBack(result: newMailboxArguments); } } void closeMailboxCreator(BuildContext context) { KeyboardUtils.hideKeyboard(context); - - if (PlatformInfo.isWeb) { - onDismissMailboxCreator?.call(); - } else { - popBack(); - } + popBack(); } } \ No newline at end of file diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart index fd7fe29c2..ab9a77c0a 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart @@ -3,6 +3,7 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:core/presentation/utils/style_utils.dart'; import 'package:core/presentation/views/text/text_field_builder.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:core/utils/platform_info.dart'; import 'package:core/utils/direction_utils.dart'; import 'package:flutter/material.dart'; @@ -11,7 +12,6 @@ import 'package:get/get.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart'; -import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/create_mailbox_name_input_decoration_builder.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -25,23 +25,11 @@ class MailboxCreatorView extends GetWidget { @override final controller = Get.find(); - MailboxCreatorView({Key? key}) : super(key: key) { - controller.arguments = Get.arguments; - } - - MailboxCreatorView.fromArguments( - MailboxCreatorArguments arguments, { - Key? key, - OnCreatedMailboxCallback? onCreatedMailboxCallback, - VoidCallback? onDismissCallback - }) : super(key: key) { - controller.arguments = arguments; - controller.onCreatedMailboxCallback = onCreatedMailboxCallback; - controller.onDismissMailboxCreator = onDismissCallback; - } + MailboxCreatorView({super.key}); @override Widget build(BuildContext context) { + log('MailboxCreatorView::build():'); return PointerInterceptor( child: GestureDetector( onTap: () => controller.closeMailboxCreator(context), @@ -114,7 +102,6 @@ class MailboxCreatorView extends GetWidget { return Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), child: Obx(() => TextFieldBuilder( - key: const Key('create_mailbox_name_input'), onTextChange: controller.setNewNameMailbox, keyboardType: TextInputType.visiblePassword, cursorColor: AppColor.colorTextButton, diff --git a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart index 11d67ab44..3089698af 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -25,6 +25,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/da import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class AdvancedFilterController extends BaseController { @@ -131,30 +132,19 @@ class AdvancedFilterController extends BaseController { final session = _mailboxDashBoardController.sessionCurrent; if (accountId != null) { final arguments = DestinationPickerArguments( - accountId, - MailboxActions.select, - session, - mailboxIdSelected: searchController.searchEmailFilter.value.mailbox?.id); + accountId, + MailboxActions.select, + session, + mailboxIdSelected: searchController.searchEmailFilter.value.mailbox?.id); - if (PlatformInfo.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - _destinationMailboxSelected = destinationMailbox; - final mailboxName = destinationMailbox.name?.name; - mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName); - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); + final destinationMailbox = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments) + : await push(AppRoutes.destinationPicker, arguments: arguments); - if (destinationMailbox is PresentationMailbox) { - _destinationMailboxSelected = destinationMailbox; - final mailboxName = destinationMailbox.name?.name; - mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName); - } + if (destinationMailbox is PresentationMailbox) { + _destinationMailboxSelected = destinationMailbox; + final mailboxName = destinationMailbox.name?.name; + mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName); } } } diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 40038f4cb..31dd203b5 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -120,6 +120,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_emai import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/navigation_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_utils.dart'; @@ -791,35 +792,22 @@ class MailboxDashBoardController extends ReloadableController { sessionCurrent, mailboxIdSelected: currentMailbox.mailboxId); - if (PlatformInfo.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - if (sessionCurrent != null) { - _dispatchMoveToMultipleAction( - accountId.value!, - sessionCurrent!, - listEmails.listEmailIds, - currentMailbox, - destinationMailbox); - } - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); + final destinationMailbox = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments) + : await push(AppRoutes.destinationPicker, arguments: arguments); - if (destinationMailbox != null && - destinationMailbox is PresentationMailbox && - sessionCurrent != null) { - _dispatchMoveToMultipleAction( - accountId.value!, - sessionCurrent!, - listEmails.listEmailIds, - currentMailbox, - destinationMailbox); - } + if (destinationMailbox != null && + destinationMailbox is PresentationMailbox && + sessionCurrent != null && + accountId.value != null + ) { + _dispatchMoveToMultipleAction( + accountId.value!, + sessionCurrent!, + listEmails.listEmailIds, + currentMailbox, + destinationMailbox + ); } } } diff --git a/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart b/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart index 2a64cff7b..5e289ebb9 100644 --- a/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart +++ b/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart @@ -30,6 +30,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/manage_accoun import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; @@ -88,23 +89,12 @@ class EmailRulesController extends BaseController { if (accountId != null && session != null) { final arguments = RulesFilterCreatorArguments(accountId, session); - if (PlatformInfo.isWeb) { - showDialogRuleFilterCreator( - context: context, - arguments: arguments, - onCreatedRuleFilter: (arguments) { - if (arguments is CreateNewEmailRuleFilterRequest) { - _createNewRuleFilterAction(accountId, arguments); - } - }); - } else { - final newRuleFilterRequest = await push( - AppRoutes.rulesFilterCreator, - arguments: arguments); + final newRuleFilterRequest = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments) + : await push(AppRoutes.rulesFilterCreator, arguments: arguments); - if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) { - _createNewRuleFilterAction(accountId, newRuleFilterRequest); - } + if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) { + _createNewRuleFilterAction(accountId, newRuleFilterRequest); } } } @@ -140,23 +130,12 @@ class EmailRulesController extends BaseController { actionType: CreatorActionType.edit, tMailRule: rule); - if (PlatformInfo.isWeb) { - showDialogRuleFilterCreator( - context: context, - arguments: arguments, - onCreatedRuleFilter: (arguments) { - if (arguments is EditEmailRuleFilterRequest) { - _editEmailRuleFilterAction(accountId, arguments); - } - }); - } else { - final newRuleFilterRequest = await push( - AppRoutes.rulesFilterCreator, - arguments: arguments); + final newRuleFilterRequest = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments) + : await push(AppRoutes.rulesFilterCreator, arguments: arguments); - if (newRuleFilterRequest is EditEmailRuleFilterRequest) { - _editEmailRuleFilterAction(accountId, newRuleFilterRequest); - } + if (newRuleFilterRequest is EditEmailRuleFilterRequest) { + _editEmailRuleFilterAction(accountId, newRuleFilterRequest); } } } diff --git a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart index fad71774f..982184458 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart @@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/identit import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class IdentitiesController extends BaseController { @@ -152,27 +153,14 @@ class IdentitiesController extends BaseController { if (accountId != null && session != null && userProfile != null) { final arguments = IdentityCreatorArguments(accountId, session, userProfile); - if (PlatformInfo.isWeb) { - showDialogIdentityCreator( - context: context, - arguments: arguments, - onCreatedIdentity: (arguments) { - if (arguments is CreateNewIdentityRequest) { - _createNewIdentityAction(session, accountId, arguments); - } else if (arguments is EditIdentityRequest) { - _editIdentityAction(session, accountId, arguments); - } - }); - } else { - final newIdentityArguments = await push( - AppRoutes.identityCreator, - arguments: arguments); + final newIdentityArguments = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments) + : await push(AppRoutes.identityCreator, arguments: arguments); - if (newIdentityArguments is CreateNewIdentityRequest) { - _createNewIdentityAction(session, accountId, newIdentityArguments); - } else if (newIdentityArguments is EditIdentityRequest) { - _editIdentityAction(session, accountId, newIdentityArguments); - } + if (newIdentityArguments is CreateNewIdentityRequest) { + _createNewIdentityAction(session, accountId, newIdentityArguments); + } else if (newIdentityArguments is EditIdentityRequest) { + _editIdentityAction(session, accountId, newIdentityArguments); } } } @@ -271,33 +259,20 @@ class IdentitiesController extends BaseController { final session = _accountDashBoardController.sessionCurrent; if (accountId != null && session != null && userProfile != null) { final arguments = IdentityCreatorArguments( - accountId, - session, - userProfile, - identity: identity, - actionType: IdentityActionType.edit); + accountId, + session, + userProfile, + identity: identity, + actionType: IdentityActionType.edit); - if (PlatformInfo.isWeb) { - showDialogIdentityCreator( - context: context, - arguments: arguments, - onCreatedIdentity: (arguments) { - if (arguments is CreateNewIdentityRequest) { - _createNewIdentityAction(session, accountId, arguments); - } else if (arguments is EditIdentityRequest) { - _editIdentityAction(session, accountId, arguments); - } - }); - } else { - final newIdentityArguments = await push( - AppRoutes.identityCreator, - arguments: arguments); + final newIdentityArguments = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments) + : await push(AppRoutes.identityCreator, arguments: arguments); - if (newIdentityArguments is CreateNewIdentityRequest) { - _createNewIdentityAction(session, accountId, newIdentityArguments); - } else if (newIdentityArguments is EditIdentityRequest) { - _editIdentityAction(session, accountId, newIdentityArguments); - } + if (newIdentityArguments is CreateNewIdentityRequest) { + _createNewIdentityAction(session, accountId, newIdentityArguments); + } else if (newIdentityArguments is EditIdentityRequest) { + _editIdentityAction(session, accountId, newIdentityArguments); } } } diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart index ce17e4b42..b97a5d59e 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart @@ -79,8 +79,4 @@ class RulesFilterCreatorBindings extends BaseBindings { Get.find(), )); } - - void dispose() { - Get.delete(); - } } \ No newline at end of file diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart index 6edced795..b0ed5fa55 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart @@ -35,10 +35,9 @@ import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/e import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; -typedef OnCreatedRuleFilterCallback = Function(dynamic arguments); - class RulesFilterCreatorController extends BaseMailboxController { final _appToast = Get.find(); @@ -56,17 +55,15 @@ class RulesFilterCreatorController extends BaseMailboxController { final mailboxSelected = Rxn(); final actionType = CreatorActionType.create.obs; - TextEditingController? inputRuleNameController; - TextEditingController? inputConditionValueController; - FocusNode? inputRuleNameFocusNode; - FocusNode? inputRuleConditionFocusNode; + final TextEditingController inputRuleNameController = TextEditingController(); + final TextEditingController inputConditionValueController = TextEditingController(); + final FocusNode inputRuleNameFocusNode = FocusNode(); + final FocusNode inputRuleConditionFocusNode = FocusNode(); String? _newRuleName; String? _newRuleConditionValue; RulesFilterCreatorArguments? arguments; - OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback; - VoidCallback? onDismissRuleFilterCreator; AccountId? _accountId; Session? _session; TMailRule? _currentTMailRule; @@ -82,15 +79,14 @@ class RulesFilterCreatorController extends BaseMailboxController { @override void onInit() { super.onInit(); - inputRuleNameController = TextEditingController(); - inputConditionValueController = TextEditingController(); - inputRuleNameFocusNode = FocusNode(); - inputRuleConditionFocusNode = FocusNode(); + log('RulesFilterCreatorController::onInit():arguments: ${Get.arguments}'); + arguments = Get.arguments; } @override void onReady() { super.onReady(); + log('RulesFilterCreatorController::onReady():'); if (arguments != null) { _accountId = arguments!.accountId; _session = arguments!.session; @@ -110,7 +106,11 @@ class RulesFilterCreatorController extends BaseMailboxController { @override void onClose() { - _disposeWidget(); + log('RulesFilterCreatorController::onClose():'); + inputRuleNameFocusNode.dispose(); + inputRuleConditionFocusNode.dispose(); + inputRuleNameController.dispose(); + inputConditionValueController.dispose(); super.onClose(); } @@ -158,7 +158,7 @@ class RulesFilterCreatorController extends BaseMailboxController { } break; } - inputRuleNameFocusNode?.requestFocus(); + inputRuleNameFocusNode.requestFocus(); } void _setValueInputField(TextEditingController? controller, String value) { @@ -219,31 +219,19 @@ class RulesFilterCreatorController extends BaseMailboxController { void selectMailbox(BuildContext context) async { if (_accountId != null) { final arguments = DestinationPickerArguments( - _accountId!, - MailboxActions.selectForRuleAction, - _session); + _accountId!, + MailboxActions.selectForRuleAction, + _session); - if (PlatformInfo.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - mailboxSelected.value = destinationMailbox; - errorRuleActionValue.value = _getErrorStringByInputValue( - context, - mailboxSelected.value?.name?.name); - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); + final destinationMailbox = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments) + : await push(AppRoutes.destinationPicker, arguments: arguments); - if (destinationMailbox is PresentationMailbox && context.mounted) { - mailboxSelected.value = destinationMailbox; - errorRuleActionValue.value = _getErrorStringByInputValue( - context, - mailboxSelected.value?.name?.name); - } + if (destinationMailbox is PresentationMailbox && context.mounted) { + mailboxSelected.value = destinationMailbox; + errorRuleActionValue.value = _getErrorStringByInputValue( + context, + mailboxSelected.value?.name?.name); } } } @@ -254,14 +242,14 @@ class RulesFilterCreatorController extends BaseMailboxController { final errorName = _getErrorStringByInputValue(context, _newRuleName); if (errorName?.isNotEmpty == true) { errorRuleName.value = errorName; - inputRuleNameFocusNode?.requestFocus(); + inputRuleNameFocusNode.requestFocus(); return; } final errorCondition = _getErrorStringByInputValue(context, _newRuleConditionValue); if (errorCondition?.isNotEmpty == true) { errorRuleConditionValue.value = errorCondition; - inputRuleConditionFocusNode?.requestFocus(); + inputRuleConditionFocusNode.requestFocus(); return; } @@ -301,53 +289,15 @@ class RulesFilterCreatorController extends BaseMailboxController { value: _newRuleConditionValue! )); - if (actionType.value == CreatorActionType.create) { - final ruleFilterRequest = CreateNewEmailRuleFilterRequest( - _listEmailRule ?? [], - newTMailRule); - - if (PlatformInfo.isWeb) { - onCreatedRuleFilterCallback?.call(ruleFilterRequest); - } else { - popBack(result: ruleFilterRequest); - } - } else { - final ruleFilterRequest = EditEmailRuleFilterRequest( - _listEmailRule?.withIds ?? [], - newTMailRule); - - if (PlatformInfo.isWeb) { - onCreatedRuleFilterCallback?.call(ruleFilterRequest); - } else { - popBack(result: ruleFilterRequest); - } - } - } - - void _clearAll() { - inputRuleNameController?.clear(); - inputConditionValueController?.clear(); - } - - void _disposeWidget() { - inputRuleNameFocusNode?.dispose(); - inputRuleNameFocusNode = null; - inputRuleConditionFocusNode?.dispose(); - inputRuleConditionFocusNode = null; - inputRuleNameController?.dispose(); - inputRuleNameController = null; - inputConditionValueController?.dispose(); - inputConditionValueController = null; + final ruleFilterRequest = + actionType.value == CreatorActionType.create + ? CreateNewEmailRuleFilterRequest(_listEmailRule ?? [], newTMailRule) + : EditEmailRuleFilterRequest(_listEmailRule?.withIds ?? [], newTMailRule); + popBack(result: ruleFilterRequest); } void closeView(BuildContext context) { - _clearAll(); KeyboardUtils.hideKeyboard(context); - - if (PlatformInfo.isWeb) { - onDismissRuleFilterCreator?.call(); - } else { - popBack(); - } + popBack(); } } \ No newline at end of file diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart index 7311a4d68..373578814 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_view.dart @@ -8,7 +8,6 @@ import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition; import 'package:tmail_ui_user/features/base/widget/drop_down_button_widget.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/extensions/rule_condition_extensions.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/email_rule_filter_action.dart'; -import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_action_bottom_sheet_action_tile_builder.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_comparator_bottom_sheet_action_tile_builder.dart'; @@ -26,20 +25,7 @@ class RuleFilterCreatorView extends GetWidget { @override final controller = Get.find(); - RuleFilterCreatorView({Key? key}) : super(key: key) { - controller.arguments = Get.arguments; - } - - RuleFilterCreatorView.fromArguments( - RulesFilterCreatorArguments arguments, { - Key? key, - OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback, - VoidCallback? onDismissCallback - }) : super(key: key) { - controller.arguments = arguments; - controller.onCreatedRuleFilterCallback = onCreatedRuleFilterCallback; - controller.onDismissRuleFilterCreator = onDismissCallback; - } + RuleFilterCreatorView({super.key}); @override Widget build(BuildContext context) { diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index 66d995829..722d0fe33 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -66,6 +66,7 @@ import 'package:tmail_ui_user/features/thread/presentation/extensions/list_prese import 'package:tmail_ui_user/features/thread/presentation/mixin/email_action_controller.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class SearchEmailController extends BaseController @@ -478,41 +479,25 @@ class SearchEmailController extends BaseController void selectMailboxForSearchFilter(BuildContext context, PresentationMailbox? mailbox) async { final arguments = DestinationPickerArguments( - mailboxDashBoardController.accountId.value!, - MailboxActions.select, - mailboxDashBoardController.sessionCurrent, - mailboxIdSelected: mailbox?.id); + mailboxDashBoardController.accountId.value!, + MailboxActions.select, + mailboxDashBoardController.sessionCurrent, + mailboxIdSelected: mailbox?.id); - if (PlatformInfo.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox; - if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) { - _updateSimpleSearchFilter( - mailboxOption: Some(mailboxSelected), - beforeOption: const None() - ); - _searchEmailAction(context); - } - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); + final destinationMailbox = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments) + : await push(AppRoutes.destinationPicker, arguments: arguments); - if (destinationMailbox is PresentationMailbox) { - final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox; - if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) { - _updateSimpleSearchFilter( - mailboxOption: Some(mailboxSelected), - beforeOption: const None() - ); + if (destinationMailbox is PresentationMailbox) { + final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox; + if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) { + _updateSimpleSearchFilter( + mailboxOption: Some(mailboxSelected), + beforeOption: const None() + ); - if (context.mounted) { - _searchEmailAction(context); - } + if (context.mounted) { + _searchEmailAction(context); } } } @@ -526,29 +511,14 @@ class SearchEmailController extends BaseController final listContactSelected = simpleSearchFilter.value.getContactApplied(prefixEmailAddress); final arguments = ContactArguments(accountId!, session!, listContactSelected); - if (PlatformInfo.isWeb) { - showDialogContactView( - context: context, - arguments: arguments, - onSelectedContact: (newContact) { - _dispatchApplyContactAction( - context, - listContactSelected, - prefixEmailAddress, - newContact); - }); - } else { - final newContact = await push( - AppRoutes.contact, - arguments: arguments); + final newContact = await push(AppRoutes.contact, arguments: arguments); - if (newContact is EmailAddress && context.mounted) { - _dispatchApplyContactAction( - context, - listContactSelected, - prefixEmailAddress, - newContact); - } + if (newContact is EmailAddress && context.mounted) { + _dispatchApplyContactAction( + context, + listContactSelected, + prefixEmailAddress, + newContact); } } } diff --git a/lib/features/thread/presentation/mixin/email_action_controller.dart b/lib/features/thread/presentation/mixin/email_action_controller.dart index de80316bc..cce92b218 100644 --- a/lib/features/thread/presentation/mixin/email_action_controller.dart +++ b/lib/features/thread/presentation/mixin/email_action_controller.dart @@ -17,7 +17,6 @@ import 'package:model/email/presentation_email.dart'; import 'package:model/email/read_actions.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; -import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_action.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; @@ -27,10 +26,11 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/dialog_router.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/utils/app_utils.dart'; -mixin EmailActionController on ViewAsDialogActionMixin { +mixin EmailActionController { final mailboxDashBoardController = Get.find(); final responsiveUtils = Get.find(); @@ -131,38 +131,22 @@ mixin EmailActionController on ViewAsDialogActionMixin { session, mailboxIdSelected: mailboxContain.mailboxId); - if (PlatformInfo.isWeb) { - showDialogDestinationPicker( - context: context, - arguments: arguments, - onSelectedMailbox: (destinationMailbox) { - if (mailboxDashBoardController.sessionCurrent != null) { - _dispatchMoveToAction( - context, - accountId, - mailboxDashBoardController.sessionCurrent!, - email, - mailboxContain, - destinationMailbox); - } - }); - } else { - final destinationMailbox = await push( - AppRoutes.destinationPicker, - arguments: arguments); + final destinationMailbox = PlatformInfo.isWeb + ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments) + : await push(AppRoutes.destinationPicker, arguments: arguments); - if (destinationMailbox != null && + if (destinationMailbox != null && context.mounted && destinationMailbox is PresentationMailbox && - mailboxDashBoardController.sessionCurrent != null) { - _dispatchMoveToAction( - context, - accountId, - mailboxDashBoardController.sessionCurrent!, - email, - mailboxContain, - destinationMailbox); - } + mailboxDashBoardController.sessionCurrent != null + ) { + _dispatchMoveToAction( + context, + accountId, + mailboxDashBoardController.sessionCurrent!, + email, + mailboxContain, + destinationMailbox); } } } diff --git a/lib/main/pages/app_pages.dart b/lib/main/pages/app_pages.dart index be3f966ed..0a24cd9e3 100644 --- a/lib/main/pages/app_pages.dart +++ b/lib/main/pages/app_pages.dart @@ -65,6 +65,13 @@ class AppPages { manage_account_dashboard.loadLibrary, () => manage_account_dashboard.ManageAccountDashBoardView()), binding: ManageAccountDashBoardBindings()), + GetPage( + name: AppRoutes.contact, + opaque: false, + page: () => DeferredWidget( + contact_view.loadLibrary, + () => contact_view.ContactView()), + binding: ContactBindings()), unknownRoutePage, if (PlatformInfo.isMobile) ...[ @@ -89,13 +96,6 @@ class AppPages { mailbox_creator.loadLibrary, () => mailbox_creator.MailboxCreatorView()), binding: MailboxCreatorBindings()), - GetPage( - name: AppRoutes.contact, - opaque: false, - page: () => DeferredWidget( - contact_view.loadLibrary, - () => contact_view.ContactView()), - binding: ContactBindings()), GetPage( name: AppRoutes.rulesFilterCreator, opaque: false, diff --git a/lib/main/routes/dialog_router.dart b/lib/main/routes/dialog_router.dart new file mode 100644 index 000000000..786b50ae9 --- /dev/null +++ b/lib/main/routes/dialog_router.dart @@ -0,0 +1,62 @@ + +import 'package:core/utils/app_logger.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_bindings.dart'; +import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_view.dart'; +import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart'; +import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart'; +import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_bindings.dart'; +import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart'; +import 'package:tmail_ui_user/main/routes/app_routes.dart'; + +class DialogRouter { + + static Future pushGeneralDialog({ + required String routeName, + required Object? arguments + }) { + _bindingDI(routeName); + + return Get.generalDialog( + routeSettings: RouteSettings(arguments: arguments), + pageBuilder: (_, __, ___) => _generateView(routeName: routeName, arguments: arguments) + ); + } + + static void _bindingDI(String routeName) { + log('DialogRouter::_bindingDI():routeName: $routeName'); + switch(routeName) { + case AppRoutes.mailboxCreator: + MailboxCreatorBindings().dependencies(); + break; + case AppRoutes.rulesFilterCreator: + RulesFilterCreatorBindings().dependencies(); + break; + case AppRoutes.identityCreator: + IdentityCreatorBindings().dependencies(); + break; + case AppRoutes.destinationPicker: + DestinationPickerBindings().dependencies(); + break; + } + } + + static Widget _generateView({required String routeName, required Object? arguments}) { + log('DialogRouter::_generateView():routeName: $routeName | arguments: $arguments'); + switch(routeName) { + case AppRoutes.mailboxCreator: + return MailboxCreatorView(); + case AppRoutes.rulesFilterCreator: + return RuleFilterCreatorView(); + case AppRoutes.identityCreator: + return IdentityCreatorView(); + case AppRoutes.destinationPicker: + return DestinationPickerView(); + default: + return const SizedBox.shrink(); + } + } +} \ No newline at end of file