diff --git a/lib/features/manage_account/presentation/vacation/utils/vacation_utils.dart b/lib/features/manage_account/presentation/vacation/utils/vacation_utils.dart index cb28686c0..59734bcdf 100644 --- a/lib/features/manage_account/presentation/vacation/utils/vacation_utils.dart +++ b/lib/features/manage_account/presentation/vacation/utils/vacation_utils.dart @@ -3,8 +3,6 @@ import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:flutter/material.dart'; class VacationUtils { - static const String vacationTagName = 'Vacation'; - static EdgeInsets getPaddingView(BuildContext context, ResponsiveUtils responsiveUtils) { if (responsiveUtils.isDesktop(context)) { return const EdgeInsets.symmetric(vertical: 24, horizontal: 20); diff --git a/lib/features/manage_account/presentation/vacation/vacation_controller.dart b/lib/features/manage_account/presentation/vacation/vacation_controller.dart index b1b1100d7..5d20f3ee0 100644 --- a/lib/features/manage_account/presentation/vacation/vacation_controller.dart +++ b/lib/features/manage_account/presentation/vacation/vacation_controller.dart @@ -25,33 +25,34 @@ class VacationController extends BaseController { final _settingController = Get.find(); final UpdateVacationInteractor _updateVacationInteractor; - final RichTextWebController _richTextControllerForWeb; final vacationPresentation = VacationPresentation.initialize().obs; final errorMessageBody = Rxn(); final subjectTextController = TextEditingController(); final subjectTextFocusNode = FocusNode(); - final richTextControllerForMobile = RichTextController(); final GlobalKey htmlKey = GlobalKey(); VacationResponse? currentVacation; String? _vacationMessageHtmlText; + RichTextController? richTextControllerForMobile; + RichTextWebController? richTextControllerForWeb; + final ScrollController scrollController = ScrollController(); - VacationController( - this._updateVacationInteractor, - this._richTextControllerForWeb - ); + VacationController(this._updateVacationInteractor); String? get vacationMessageHtmlText => _vacationMessageHtmlText; - RichTextWebController get richTextControllerForWeb => _richTextControllerForWeb; - @override void onInit() { + if (PlatformInfo.isWeb) { + richTextControllerForWeb = RichTextWebController(); + } else { + richTextControllerForMobile = RichTextController(); + } _initWorker(); _initFocusListener(); super.onInit(); @@ -82,7 +83,7 @@ class VacationController extends BaseController { void _onSubjectTextListener() { if (subjectTextFocusNode.hasFocus && PlatformInfo.isMobile) { - richTextControllerForMobile.hideRichTextView(); + richTextControllerForMobile?.hideRichTextView(); } } @@ -91,9 +92,9 @@ class VacationController extends BaseController { subjectTextController.text = newVacation.subject ?? ''; updateMessageHtmlText(newVacation.messageHtmlText ?? ''); if (PlatformInfo.isWeb) { - _richTextControllerForWeb.editorController.setText(newVacation.messageHtmlText ?? ''); + richTextControllerForWeb?.editorController.setText(newVacation.messageHtmlText ?? ''); } else { - richTextControllerForMobile.htmlEditorApi?.setText(newVacation.messageHtmlText ?? ''); + richTextControllerForMobile?.htmlEditorApi?.setText(newVacation.messageHtmlText ?? ''); } } @@ -131,7 +132,7 @@ class VacationController extends BaseController { void selectDate(BuildContext context, DateType dateType, DateTime? currentDate) async { if (PlatformInfo.isMobile) { - richTextControllerForMobile.htmlEditorApi?.unfocus(); + richTextControllerForMobile?.htmlEditorApi?.unfocus(); } FocusScope.of(context).unfocus(); @@ -177,7 +178,7 @@ class VacationController extends BaseController { void selectTime(BuildContext context, DateType dateType, TimeOfDay? currentTime) async { if (PlatformInfo.isMobile) { - richTextControllerForMobile.htmlEditorApi?.unfocus(); + richTextControllerForMobile?.htmlEditorApi?.unfocus(); } FocusScope.of(context).unfocus(); @@ -298,15 +299,15 @@ class VacationController extends BaseController { Future? _getMessageHtmlText() { if (PlatformInfo.isWeb) { - return _richTextControllerForWeb.editorController.getText(); + return richTextControllerForWeb?.editorController.getText(); } else { - return richTextControllerForMobile.htmlEditorApi?.getText(); + return richTextControllerForMobile?.htmlEditorApi?.getText(); } } void clearFocusEditor(BuildContext context) { if (PlatformInfo.isMobile) { - richTextControllerForMobile.htmlEditorApi?.unfocus(); + richTextControllerForMobile?.htmlEditorApi?.unfocus(); } KeyboardUtils.hideKeyboard(context); } @@ -317,7 +318,7 @@ class VacationController extends BaseController { } void initRichTextForMobile(BuildContext context, HtmlEditorApi editorApi) { - richTextControllerForMobile.onCreateHTMLEditor( + richTextControllerForMobile?.onCreateHTMLEditor( editorApi, onFocus: () => onFocusHTMLEditor(context), onEnterKeyDown: onEnterKeyDown, @@ -329,7 +330,7 @@ class VacationController extends BaseController { FocusScope.of(context).unfocus(); await Future.delayed( const Duration(milliseconds: 300), - richTextControllerForMobile.showDeviceKeyboard); + richTextControllerForMobile?.showDeviceKeyboard); } subjectTextFocusNode.unfocus(); @@ -359,8 +360,12 @@ class VacationController extends BaseController { subjectTextFocusNode.removeListener(_onSubjectTextListener); subjectTextFocusNode.dispose(); subjectTextController.dispose(); - richTextControllerForMobile.dispose(); scrollController.dispose(); + if (PlatformInfo.isWeb) { + richTextControllerForWeb?.onClose(); + } else { + richTextControllerForMobile?.dispose(); + } super.onClose(); } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/vacation/vacation_controller_bindings.dart b/lib/features/manage_account/presentation/vacation/vacation_controller_bindings.dart index 12dae3fa5..df2ad07a0 100644 --- a/lib/features/manage_account/presentation/vacation/vacation_controller_bindings.dart +++ b/lib/features/manage_account/presentation/vacation/vacation_controller_bindings.dart @@ -1,8 +1,6 @@ import 'package:get/get.dart'; -import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart'; -import 'package:tmail_ui_user/features/manage_account/presentation/vacation/utils/vacation_utils.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller.dart'; class VacationControllerBindings extends Bindings { @@ -10,10 +8,6 @@ class VacationControllerBindings extends Bindings { @override void dependencies() { Get.lazyPut(() => VerifyNameInteractor()); - Get.lazyPut(() => RichTextWebController(), tag: VacationUtils.vacationTagName); - Get.put(VacationController( - Get.find(), - Get.find(tag: VacationUtils.vacationTagName), - )); + Get.put(VacationController(Get.find())); } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/vacation/vacation_view.dart b/lib/features/manage_account/presentation/vacation/vacation_view.dart index e608e20b9..36a86aeaf 100644 --- a/lib/features/manage_account/presentation/vacation/vacation_view.dart +++ b/lib/features/manage_account/presentation/vacation/vacation_view.dart @@ -289,7 +289,7 @@ class VacationView extends GetWidget with RichTextButtonMixi top: false, right: controller.responsiveUtils.isPortraitMobile(context), child: KeyboardRichText( - richTextController: controller.richTextControllerForMobile, + richTextController: controller.richTextControllerForMobile!, keyBroadToolbar: RichTextKeyboardToolBar( rootContext: context, titleBack: AppLocalizations.of(context).format, @@ -297,7 +297,7 @@ class VacationView extends GetWidget with RichTextButtonMixi ? AppColor.colorBackgroundKeyboard : AppColor.colorBackgroundKeyboardAndroid, formatLabel: AppLocalizations.of(context).format, - richTextController: controller.richTextControllerForMobile, + richTextController: controller.richTextControllerForMobile!, quickStyleLabel: AppLocalizations.of(context).quickStyles, backgroundLabel: AppLocalizations.of(context).background, foregroundLabel: AppLocalizations.of(context).foreground, @@ -323,7 +323,7 @@ class VacationView extends GetWidget with RichTextButtonMixi backgroundColor: SettingsUtils.getBackgroundColor(context, controller.responsiveUtils), body: SafeArea( child: KeyboardRichText( - richTextController: controller.richTextControllerForMobile, + richTextController: controller.richTextControllerForMobile!, keyBroadToolbar: RichTextKeyboardToolBar( rootContext: context, titleBack: AppLocalizations.of(context).format, @@ -331,7 +331,7 @@ class VacationView extends GetWidget with RichTextButtonMixi ? AppColor.colorBackgroundKeyboard : AppColor.colorBackgroundKeyboardAndroid, formatLabel: AppLocalizations.of(context).format, - richTextController: controller.richTextControllerForMobile, + richTextController: controller.richTextControllerForMobile!, quickStyleLabel: AppLocalizations.of(context).quickStyles, backgroundLabel: AppLocalizations.of(context).background, foregroundLabel: AppLocalizations.of(context).foreground, @@ -462,7 +462,7 @@ class VacationView extends GetWidget with RichTextButtonMixi child: PointerInterceptor( child: buildToolbarRichTextForWeb( context, - controller.richTextControllerForWeb, + controller.richTextControllerForWeb!, layoutType: ButtonLayoutType.scrollHorizontal ) ) @@ -477,7 +477,7 @@ class VacationView extends GetWidget with RichTextButtonMixi constraints: const BoxConstraints(maxHeight: 300), child: html_editor_browser.HtmlEditor( key: const Key('vacation_message_html_text_editor_web'), - controller: controller.richTextControllerForWeb.editorController, + controller: controller.richTextControllerForWeb!.editorController, htmlEditorOptions: html_editor_browser.HtmlEditorOptions( hint: '', darkMode: false, @@ -491,14 +491,14 @@ class VacationView extends GetWidget with RichTextButtonMixi defaultToolbarButtons: []), otherOptions: const html_editor_browser.OtherOptions(height: 150), callbacks: html_editor_browser.Callbacks( - onChangeSelection: controller.richTextControllerForWeb.onEditorSettingsChange, + onChangeSelection: controller.richTextControllerForWeb?.onEditorSettingsChange, onChangeContent: controller.updateMessageHtmlText, onFocus: () { KeyboardUtils.hideKeyboard(context); Future.delayed(const Duration(milliseconds: 500), () { - controller.richTextControllerForWeb.editorController.setFocus(); + controller.richTextControllerForWeb?.editorController.setFocus(); }); - controller.richTextControllerForWeb.closeAllMenuPopup(); + controller.richTextControllerForWeb?.closeAllMenuPopup(); } ), ),