TF-2475 Handle format style rich text in composer
This commit is contained in:
@@ -454,8 +454,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
richTextMobileTabletController?.richTextController.onCreateHTMLEditor(
|
richTextMobileTabletController?.richTextController.onCreateHTMLEditor(
|
||||||
editorApi,
|
editorApi,
|
||||||
onEnterKeyDown: _onEnterKeyDown,
|
onEnterKeyDown: _onEnterKeyDown,
|
||||||
context: context,
|
onFocus: () => _onEditorFocusOnMobile(context),
|
||||||
onFocus: _onEditorFocusOnMobile,
|
|
||||||
onChangeCursor: (coordinates) {
|
onChangeCursor: (coordinates) {
|
||||||
_onChangeCursorOnMobile(coordinates, context);
|
_onChangeCursorOnMobile(coordinates, context);
|
||||||
},
|
},
|
||||||
@@ -1319,7 +1318,6 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
log('ComposerController::clearFocus:');
|
log('ComposerController::clearFocus:');
|
||||||
if (PlatformInfo.isMobile) {
|
if (PlatformInfo.isMobile) {
|
||||||
htmlEditorApi?.unfocus();
|
htmlEditorApi?.unfocus();
|
||||||
KeyboardUtils.hideSystemKeyboardMobile();
|
|
||||||
}
|
}
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
}
|
}
|
||||||
@@ -1508,7 +1506,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
}
|
}
|
||||||
_closeSuggestionBox();
|
_closeSuggestionBox();
|
||||||
if (PlatformInfo.isMobile) {
|
if (PlatformInfo.isMobile) {
|
||||||
htmlEditorApi?.unfocus();
|
richTextMobileTabletController?.richTextController.hideRichTextView();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch(prefixEmailAddress) {
|
switch(prefixEmailAddress) {
|
||||||
@@ -1647,7 +1645,13 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
_closeComposerAction();
|
_closeComposerAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onEditorFocusOnMobile() {
|
Future<void> _onEditorFocusOnMobile(BuildContext context) async {
|
||||||
|
if (PlatformInfo.isAndroid) {
|
||||||
|
FocusScope.of(context).unfocus();
|
||||||
|
await Future.delayed(
|
||||||
|
const Duration(milliseconds: 300),
|
||||||
|
richTextMobileTabletController?.richTextController.showDeviceKeyboard);
|
||||||
|
}
|
||||||
_collapseAllRecipient();
|
_collapseAllRecipient();
|
||||||
_autoCreateEmailTag();
|
_autoCreateEmailTag();
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -61,12 +61,12 @@ class RichTextMobileTabletController extends BaseRichTextController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (context.mounted) {
|
if (context.mounted) {
|
||||||
richTextController?.showRichTextBottomSheet(
|
richTextController?.showFormatOptionBottomSheet(
|
||||||
context: context,
|
context: context,
|
||||||
titleFormatBottomSheet: AppLocalizations.of(context).titleFormat,
|
formatLabel: AppLocalizations.of(context).titleFormat,
|
||||||
titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles,
|
quickStyleLabel: AppLocalizations.of(context).titleQuickStyles,
|
||||||
titleForegroundBottomSheet: AppLocalizations.of(context).titleForeground,
|
foregroundLabel: AppLocalizations.of(context).titleForeground,
|
||||||
titleBackgroundBottomSheet: AppLocalizations.of(context).titleBackground,
|
backgroundLabel: AppLocalizations.of(context).titleBackground,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_portal/flutter_portal.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:rich_text_composer/rich_text_composer.dart';
|
import 'package:rich_text_composer/rich_text_composer.dart';
|
||||||
import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart';
|
import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart';
|
||||||
@@ -40,45 +41,48 @@ class TabletContainerView extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
canPop: false,
|
canPop: false,
|
||||||
child: GestureDetector(
|
child: Portal(
|
||||||
onTap: onClearFocusAction,
|
child: GestureDetector(
|
||||||
child: Scaffold(
|
onTap: onClearFocusAction,
|
||||||
backgroundColor: TabletContainerViewStyle.outSideBackgroundColor,
|
child: Scaffold(
|
||||||
body: LayoutBuilder(builder: (context, constraints) {
|
backgroundColor: TabletContainerViewStyle.outSideBackgroundColor,
|
||||||
return KeyboardRichText(
|
body: SafeArea(
|
||||||
richTextController: keyboardRichTextController,
|
child: LayoutBuilder(builder: (context, constraints) {
|
||||||
keyBroadToolbar: RichTextKeyboardToolBar(
|
return KeyboardRichText(
|
||||||
backgroundKeyboardToolBarColor: TabletContainerViewStyle.keyboardToolbarBackgroundColor,
|
|
||||||
isLandScapeMode: _responsiveUtils.isLandscapeMobile(context),
|
|
||||||
insertAttachment: onAttachFileAction,
|
|
||||||
insertImage: onInsertImageAction != null
|
|
||||||
? () => onInsertImageAction!(constraints)
|
|
||||||
: null,
|
|
||||||
richTextController: keyboardRichTextController,
|
richTextController: keyboardRichTextController,
|
||||||
titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles,
|
keyBroadToolbar: RichTextKeyboardToolBar(
|
||||||
titleBackgroundBottomSheet: AppLocalizations.of(context).titleBackground,
|
rootContext: context,
|
||||||
titleForegroundBottomSheet: AppLocalizations.of(context).titleForeground,
|
backgroundKeyboardToolBarColor: TabletContainerViewStyle.keyboardToolbarBackgroundColor,
|
||||||
titleFormatBottomSheet: AppLocalizations.of(context).titleFormat,
|
insertAttachment: onAttachFileAction,
|
||||||
titleBack: AppLocalizations.of(context).format,
|
insertImage: onInsertImageAction != null
|
||||||
),
|
? () => onInsertImageAction!(constraints)
|
||||||
paddingChild: EdgeInsets.zero,
|
: null,
|
||||||
child: Center(
|
richTextController: keyboardRichTextController,
|
||||||
child: Card(
|
quickStyleLabel: AppLocalizations.of(context).titleQuickStyles,
|
||||||
elevation: TabletContainerViewStyle.elevation,
|
backgroundLabel: AppLocalizations.of(context).titleBackground,
|
||||||
margin: TabletContainerViewStyle.getMargin(context, _responsiveUtils),
|
foregroundLabel: AppLocalizations.of(context).titleForeground,
|
||||||
shape: const RoundedRectangleBorder(
|
formatLabel: AppLocalizations.of(context).titleFormat,
|
||||||
borderRadius: BorderRadius.all(Radius.circular(TabletContainerViewStyle.radius))
|
titleBack: AppLocalizations.of(context).format,
|
||||||
),
|
),
|
||||||
clipBehavior: Clip.antiAlias,
|
child: Center(
|
||||||
child: Container(
|
child: Card(
|
||||||
color: TabletContainerViewStyle.backgroundColor,
|
elevation: TabletContainerViewStyle.elevation,
|
||||||
width: TabletContainerViewStyle.getWidth(context, _responsiveUtils),
|
margin: TabletContainerViewStyle.getMargin(context, _responsiveUtils),
|
||||||
child: childBuilder.call(context, constraints)
|
shape: const RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(TabletContainerViewStyle.radius))
|
||||||
|
),
|
||||||
|
clipBehavior: Clip.antiAlias,
|
||||||
|
child: Container(
|
||||||
|
color: TabletContainerViewStyle.backgroundColor,
|
||||||
|
width: TabletContainerViewStyle.getWidth(context, _responsiveUtils),
|
||||||
|
child: childBuilder.call(context, constraints)
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
);
|
}),
|
||||||
})
|
)
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import 'package:model/extensions/identity_extension.dart';
|
|||||||
import 'package:model/extensions/session_extension.dart';
|
import 'package:model/extensions/session_extension.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:rich_text_composer/rich_text_composer.dart';
|
import 'package:rich_text_composer/rich_text_composer.dart';
|
||||||
|
import 'package:rich_text_composer/views/commons/constants.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
|
||||||
@@ -449,7 +450,6 @@ class IdentityCreatorController extends BaseController {
|
|||||||
editorApi,
|
editorApi,
|
||||||
onEnterKeyDown: _onEnterKeyDownOnMobile,
|
onEnterKeyDown: _onEnterKeyDownOnMobile,
|
||||||
onFocus: _onFocusHTMLEditorOnMobile,
|
onFocus: _onFocusHTMLEditorOnMobile,
|
||||||
context: context
|
|
||||||
);
|
);
|
||||||
richTextMobileTabletController?.htmlEditorApi?.onFocusOut = () {
|
richTextMobileTabletController?.htmlEditorApi?.onFocusOut = () {
|
||||||
richTextMobileTabletController?.richTextController.hideRichTextView();
|
richTextMobileTabletController?.richTextController.hideRichTextView();
|
||||||
|
|||||||
@@ -146,16 +146,15 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
|
|||||||
backgroundKeyboardToolBarColor: PlatformInfo.isIOS
|
backgroundKeyboardToolBarColor: PlatformInfo.isIOS
|
||||||
? AppColor.colorBackgroundKeyboard
|
? AppColor.colorBackgroundKeyboard
|
||||||
: AppColor.colorBackgroundKeyboardAndroid,
|
: AppColor.colorBackgroundKeyboardAndroid,
|
||||||
isLandScapeMode: controller.responsiveUtils.isLandscapeMobile(context),
|
|
||||||
richTextController: controller.richTextMobileTabletController!.richTextController,
|
richTextController: controller.richTextMobileTabletController!.richTextController,
|
||||||
titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles,
|
quickStyleLabel: AppLocalizations.of(context).titleQuickStyles,
|
||||||
titleBackgroundBottomSheet: AppLocalizations.of(context).titleBackground,
|
backgroundLabel: AppLocalizations.of(context).titleBackground,
|
||||||
titleForegroundBottomSheet: AppLocalizations.of(context).titleForeground,
|
foregroundLabel: AppLocalizations.of(context).titleForeground,
|
||||||
titleFormatBottomSheet: AppLocalizations.of(context).titleFormat,
|
formatLabel: AppLocalizations.of(context).titleFormat,
|
||||||
insertImage: () => controller.pickImage(context),
|
insertImage: () => controller.pickImage(context),
|
||||||
|
rootContext: context,
|
||||||
),
|
),
|
||||||
richTextController: controller.richTextMobileTabletController!.richTextController,
|
richTextController: controller.richTextMobileTabletController!.richTextController,
|
||||||
paddingChild: EdgeInsets.zero,
|
|
||||||
child: responsiveWidget
|
child: responsiveWidget
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
|
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
|
||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:rich_text_composer/richtext_controller.dart';
|
import 'package:rich_text_composer/rich_text_controller.dart';
|
||||||
|
import 'package:rich_text_composer/views/commons/constants.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
||||||
|
|||||||
@@ -39,11 +39,12 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
|
|||||||
backgroundKeyboardToolBarColor: PlatformInfo.isIOS
|
backgroundKeyboardToolBarColor: PlatformInfo.isIOS
|
||||||
? AppColor.colorBackgroundKeyboard
|
? AppColor.colorBackgroundKeyboard
|
||||||
: AppColor.colorBackgroundKeyboardAndroid,
|
: AppColor.colorBackgroundKeyboardAndroid,
|
||||||
titleFormatBottomSheet: AppLocalizations.of(context).format,
|
|
||||||
richTextController: controller.richTextControllerForMobile,
|
richTextController: controller.richTextControllerForMobile,
|
||||||
titleQuickStyleBottomSheet: AppLocalizations.of(context).quickStyles,
|
quickStyleLabel: AppLocalizations.of(context).titleQuickStyles,
|
||||||
titleBackgroundBottomSheet: AppLocalizations.of(context).background,
|
backgroundLabel: AppLocalizations.of(context).titleBackground,
|
||||||
titleForegroundBottomSheet: AppLocalizations.of(context).foreground,
|
foregroundLabel: AppLocalizations.of(context).titleForeground,
|
||||||
|
formatLabel: AppLocalizations.of(context).titleFormat,
|
||||||
|
rootContext: context,
|
||||||
),
|
),
|
||||||
child: _buildVacationFormView(context)
|
child: _buildVacationFormView(context)
|
||||||
);
|
);
|
||||||
@@ -448,7 +449,6 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
|
|||||||
htmlApi,
|
htmlApi,
|
||||||
onFocus: controller.onFocusHTMLEditor,
|
onFocus: controller.onFocusHTMLEditor,
|
||||||
onEnterKeyDown: controller.onEnterKeyDown,
|
onEnterKeyDown: controller.onEnterKeyDown,
|
||||||
context: context,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
+1
-1
@@ -437,7 +437,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: cherry-pick-fix-rich-text-format-style
|
ref: cherry-pick-fix-rich-text-format-style
|
||||||
resolved-ref: "8eb30137b11b1008ccd4330191b4ee5e6ac2e879"
|
resolved-ref: "7041e5822707ab57fcf36964c38556e2d27b06e2"
|
||||||
url: "https://github.com/linagora/enough_html_editor.git"
|
url: "https://github.com/linagora/enough_html_editor.git"
|
||||||
source: git
|
source: git
|
||||||
version: "0.0.5"
|
version: "0.0.5"
|
||||||
|
|||||||
Reference in New Issue
Block a user