Use the correct rich text controller for each platform to avoid errors
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -25,33 +25,34 @@ class VacationController extends BaseController {
|
||||
final _settingController = Get.find<SettingsController>();
|
||||
|
||||
final UpdateVacationInteractor _updateVacationInteractor;
|
||||
final RichTextWebController _richTextControllerForWeb;
|
||||
|
||||
final vacationPresentation = VacationPresentation.initialize().obs;
|
||||
final errorMessageBody = Rxn<String>();
|
||||
|
||||
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<String>? _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();
|
||||
}
|
||||
}
|
||||
@@ -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<UpdateVacationInteractor>(),
|
||||
Get.find<RichTextWebController>(tag: VacationUtils.vacationTagName),
|
||||
));
|
||||
Get.put(VacationController(Get.find<UpdateVacationInteractor>()));
|
||||
}
|
||||
}
|
||||
@@ -289,7 +289,7 @@ class VacationView extends GetWidget<VacationController> 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<VacationController> 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<VacationController> 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<VacationController> 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<VacationController> with RichTextButtonMixi
|
||||
child: PointerInterceptor(
|
||||
child: buildToolbarRichTextForWeb(
|
||||
context,
|
||||
controller.richTextControllerForWeb,
|
||||
controller.richTextControllerForWeb!,
|
||||
layoutType: ButtonLayoutType.scrollHorizontal
|
||||
)
|
||||
)
|
||||
@@ -477,7 +477,7 @@ class VacationView extends GetWidget<VacationController> 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<VacationController> 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();
|
||||
}
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user