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