From 2491b25fd04896f593bb9278c23232179f47fafc Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 2 Feb 2024 16:21:00 +0700 Subject: [PATCH 1/8] TF-2532 Add `attachment/inlineImage` button at app bar composer on mobile/tablet --- .../composer/presentation/composer_view.dart | 22 ++++- .../mobile/app_bar_composer_widget.dart | 27 ++++++ .../landscape_app_bar_composer_widget.dart | 27 ++++++ .../tablet_app_bar_composer_widget.dart | 90 +++++++++++++++++++ 4 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 lib/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart diff --git a/lib/features/composer/presentation/composer_view.dart b/lib/features/composer/presentation/composer_view.dart index 18743df6e7..fd7318e3cc 100644 --- a/lib/features/composer/presentation/composer_view.dart +++ b/lib/features/composer/presentation/composer_view.dart @@ -19,10 +19,10 @@ import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/app_ import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/from_composer_mobile_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/mobile_attachment_composer_widget.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/tablet_bottom_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/subject_composer_widget.dart'; -import 'package:tmail_ui_user/features/composer/presentation/widgets/web/desktop_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/web/from_composer_drop_down_widget.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; @@ -69,6 +69,12 @@ class ComposerView extends GetWidget { radius: ComposerStyle.popupMenuRadius ); }, + isNetworkConnectionAvailable: controller.isNetworkConnectionAvailable, + attachFileAction: () => controller.openPickAttachmentMenu( + context, + _pickAttachmentsActionTiles(context) + ), + insertImageAction: () => controller.insertImage(context, constraints.maxWidth), )) else Obx(() => AppBarComposerWidget( @@ -83,6 +89,12 @@ class ComposerView extends GetWidget { radius: ComposerStyle.popupMenuRadius ); }, + isNetworkConnectionAvailable: controller.isNetworkConnectionAvailable, + attachFileAction: () => controller.openPickAttachmentMenu( + context, + _pickAttachmentsActionTiles(context) + ), + insertImageAction: () => controller.insertImage(context, constraints.maxWidth), )), Expanded( child: SafeArea( @@ -244,10 +256,16 @@ class ComposerView extends GetWidget { color: ComposerStyle.mobileBackgroundColor, child: Column( children: [ - Obx(() => DesktopAppBarComposerWidget( + Obx(() => TabletAppBarComposerWidget( emailSubject: controller.subjectEmail.value ?? '', onCloseViewAction: () => controller.handleClickCloseComposer(context), constraints: constraints, + isNetworkConnectionAvailable: controller.isNetworkConnectionAvailable, + attachFileAction: () => controller.openPickAttachmentMenu( + context, + _pickAttachmentsActionTiles(context) + ), + insertImageAction: () => controller.insertImage(context, constraints.maxWidth), )), Expanded( child: SingleChildScrollView( diff --git a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart index 2d174c4a05..86e2c3903a 100644 --- a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart @@ -9,8 +9,11 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class AppBarComposerWidget extends StatelessWidget { final bool isSendButtonEnabled; + final bool isNetworkConnectionAvailable; final VoidCallback onCloseViewAction; final VoidCallback sendMessageAction; + final VoidCallback attachFileAction; + final VoidCallback insertImageAction; final OnOpenContextMenuAction openContextMenuAction; final _imagePaths = Get.find(); @@ -21,6 +24,9 @@ class AppBarComposerWidget extends StatelessWidget { required this.onCloseViewAction, required this.sendMessageAction, required this.openContextMenuAction, + required this.attachFileAction, + required this.insertImageAction, + this.isNetworkConnectionAvailable = false, }); @override @@ -41,6 +47,27 @@ class AppBarComposerWidget extends StatelessWidget { onTapActionCallback: onCloseViewAction ), const Spacer(), + if (isNetworkConnectionAvailable) + ...[ + TMailButtonWidget.fromIcon( + icon: _imagePaths.icAttachFile, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).attach_file, + onTapActionCallback: attachFileAction, + ), + const SizedBox(width: 8), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icInsertImage, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).insertImage, + onTapActionCallback: insertImageAction, + ), + const SizedBox(width: 8), + ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled ? _imagePaths.icSendMobile diff --git a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart index 67e266f390..07603d9b17 100644 --- a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart @@ -9,8 +9,11 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class LandscapeAppBarComposerWidget extends StatelessWidget { final bool isSendButtonEnabled; + final bool isNetworkConnectionAvailable; final VoidCallback onCloseViewAction; final VoidCallback sendMessageAction; + final VoidCallback attachFileAction; + final VoidCallback insertImageAction; final OnOpenContextMenuAction openContextMenuAction; final _imagePaths = Get.find(); @@ -21,6 +24,9 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { required this.onCloseViewAction, required this.sendMessageAction, required this.openContextMenuAction, + required this.attachFileAction, + required this.insertImageAction, + this.isNetworkConnectionAvailable = false, }); @override @@ -44,6 +50,27 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { onTapActionCallback: onCloseViewAction ), const Spacer(), + if (isNetworkConnectionAvailable) + ...[ + TMailButtonWidget.fromIcon( + icon: _imagePaths.icAttachFile, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).attach_file, + onTapActionCallback: attachFileAction, + ), + const SizedBox(width: 8), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icInsertImage, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).insertImage, + onTapActionCallback: insertImageAction, + ), + const SizedBox(width: 8), + ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled ? _imagePaths.icSendMobile diff --git a/lib/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart new file mode 100644 index 0000000000..09686971cd --- /dev/null +++ b/lib/features/composer/presentation/widgets/mobile/tablet_app_bar_composer_widget.dart @@ -0,0 +1,90 @@ +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/views/button/tmail_button_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; +import 'package:tmail_ui_user/features/composer/presentation/styles/app_bar_composer_widget_style.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/title_composer_widget.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +class TabletAppBarComposerWidget extends StatelessWidget { + + final String emailSubject; + final VoidCallback onCloseViewAction; + final ScreenDisplayMode? displayMode; + final BoxConstraints? constraints; + final VoidCallback attachFileAction; + final VoidCallback insertImageAction; + final bool isNetworkConnectionAvailable; + + final _imagePaths = Get.find(); + + TabletAppBarComposerWidget({ + super.key, + required this.emailSubject, + required this.onCloseViewAction, + required this.attachFileAction, + required this.insertImageAction, + this.displayMode, + this.constraints, + this.isNetworkConnectionAvailable = false, + }); + + @override + Widget build(BuildContext context) { + return Container( + height: AppBarComposerWidgetStyle.height, + padding: AppBarComposerWidgetStyle.padding, + color: AppBarComposerWidgetStyle.backgroundColor, + child: Stack( + children: [ + Center( + child: Container( + constraints: constraints != null + ? BoxConstraints(maxWidth: constraints!.maxWidth / 2) + : null, + child: TitleComposerWidget(emailSubject: emailSubject), + ), + ), + Align( + alignment: AlignmentDirectional.centerEnd, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (isNetworkConnectionAvailable) + ...[ + TMailButtonWidget.fromIcon( + icon: _imagePaths.icAttachFile, + iconColor: AppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: AppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).attach_file, + onTapActionCallback: attachFileAction, + ), + const SizedBox(width: AppBarComposerWidgetStyle.space), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icInsertImage, + iconColor: AppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: AppBarComposerWidgetStyle.iconSize, + tooltipMessage: AppLocalizations.of(context).insertImage, + onTapActionCallback: insertImageAction, + ), + const SizedBox(width: AppBarComposerWidgetStyle.space), + ], + TMailButtonWidget.fromIcon( + icon: _imagePaths.icCancel, + backgroundColor: Colors.transparent, + tooltipMessage: AppLocalizations.of(context).saveAndClose, + iconSize: AppBarComposerWidgetStyle.iconSize, + iconColor: AppBarComposerWidgetStyle.iconColor, + onTapActionCallback: onCloseViewAction + ), + ], + ), + ) + ], + ), + ); + } +} \ No newline at end of file From 04d8ecefaf572fa617e932813fe72aaa0e15d269 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 2 Feb 2024 16:23:54 +0700 Subject: [PATCH 2/8] TF-2532 Invoke request focus editor when insert inline image --- .../controller/rich_text_mobile_tablet_controller.dart | 8 +++++--- .../upload/presentation/controller/upload_controller.dart | 3 --- pubspec.lock | 6 +++--- pubspec.yaml | 5 +++++ 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart b/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart index ec887b5f1c..4f349ba97b 100644 --- a/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart +++ b/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart @@ -14,11 +14,13 @@ class RichTextMobileTabletController extends BaseRichTextController { final RichTextController richTextController = RichTextController(); void insertImage(InlineImage inlineImage) async { - if (inlineImage.fileInfo.isShared == true) { - await htmlEditorApi?.moveCursorAtLastNode(); + bool isEditorFocused = await htmlEditorApi?.hasFocus() ?? false; + log('RichTextMobileTabletController::insertImage: isEditorFocused = $isEditorFocused'); + if (!isEditorFocused) { + await htmlEditorApi?.requestFocusLastChild(); } if (inlineImage.base64Uri?.isNotEmpty == true) { - await htmlEditorApi?.insertHtml(inlineImage.base64Uri!); + await htmlEditorApi?.insertHtml('${inlineImage.base64Uri ?? ''}

'); } } diff --git a/lib/features/upload/presentation/controller/upload_controller.dart b/lib/features/upload/presentation/controller/upload_controller.dart index b32d4425db..37569703b1 100644 --- a/lib/features/upload/presentation/controller/upload_controller.dart +++ b/lib/features/upload/presentation/controller/upload_controller.dart @@ -170,9 +170,6 @@ class UploadController extends BaseController { cid: uuid.v1() ); - final uploadFileState = _uploadingStateInlineFiles.getUploadFileStateById(success.uploadId); - log('UploadController::_handleProgressUploadInlineImageStateStream:uploadId: ${uploadFileState?.uploadTaskId} | fromFileShared: ${uploadFileState?.file?.isShared}'); - _uploadingStateInlineFiles.updateElementByUploadTaskId( success.uploadId, (currentState) { diff --git a/pubspec.lock b/pubspec.lock index c2272824e9..1560c58cac 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -433,11 +433,11 @@ packages: source: path version: "1.0.0+1" enough_html_editor: - dependency: transitive + dependency: "direct overridden" description: path: "." - ref: cnb_supported - resolved-ref: "6409f47b01c5992906971f2d8fdb8be3278bf787" + ref: cherry-pick-add-attachment-app-bar + resolved-ref: "195c74a0d65fc95226dbd257a40bc8c0c55f9a3e" url: "https://github.com/linagora/enough_html_editor.git" source: git version: "0.0.5" diff --git a/pubspec.yaml b/pubspec.yaml index b3628eb82c..8c5a7fc17b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -280,6 +280,11 @@ dependency_overrides: url: https://github.com/linagora/flutter_file_picker ref: email_supported_5.3.1 + enough_html_editor: + git: + url: https://github.com/linagora/enough_html_editor.git + ref: cherry-pick-add-attachment-app-bar + # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 4a4edd7b13f695a4ccca6e0240e5a4fac9d18c67 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 2 Feb 2024 16:26:14 +0700 Subject: [PATCH 3/8] TF-2532 Only clear old data stream when add object to stream in share file Signed-off-by: dab246 (cherry picked from commit 181e1ec20dafe4f865d0f2ce606311cf216e06fd) --- .../mailbox_dashboard_controller.dart | 3 --- lib/main/utils/email_receive_manager.dart | 18 ++++++++---------- 2 files changed, 8 insertions(+), 13 deletions(-) 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 6cbc94eb79..0b766ba8a7 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -416,7 +416,6 @@ class MailboxDashBoardController extends ReloadableController { _emailAddressStreamSubscription = _emailReceiveManager.pendingEmailAddressInfo.stream.listen((emailAddress) { if (emailAddress?.email?.isNotEmpty == true) { - _emailReceiveManager.clearPendingEmailAddress(); goToComposer(ComposerArguments.fromEmailAddress(emailAddress!)); } }); @@ -426,7 +425,6 @@ class MailboxDashBoardController extends ReloadableController { _emailContentStreamSubscription = _emailReceiveManager.pendingEmailContentInfo.stream.listen((emailContent) { if (emailContent?.content.isNotEmpty == true) { - _emailReceiveManager.clearPendingEmailContent(); goToComposer(ComposerArguments.fromContentShared([emailContent!].asHtmlString)); } }); @@ -436,7 +434,6 @@ class MailboxDashBoardController extends ReloadableController { _fileReceiveManagerStreamSubscription = _emailReceiveManager.pendingFileInfo.stream.listen((listFile) { if (listFile.isNotEmpty) { - _emailReceiveManager.clearPendingFileInfo(); goToComposer(ComposerArguments.fromFileShared(listFile)); } }); diff --git a/lib/main/utils/email_receive_manager.dart b/lib/main/utils/email_receive_manager.dart index 4b0943c554..2d2c84c6c2 100644 --- a/lib/main/utils/email_receive_manager.dart +++ b/lib/main/utils/email_receive_manager.dart @@ -29,16 +29,16 @@ class EmailReceiveManager { } void setPendingEmailAddress(EmailAddress emailAddress) async { - clearPendingEmailAddress(); + _clearPendingEmailAddress(); _pendingEmailAddressInfo.add(emailAddress); } void setPendingEmailContent(EmailContent emailContent) async { - clearPendingEmailAddress(); + _clearPendingEmailContent(); _pendingEmailContentInfo.add(emailContent); } - void clearPendingEmailContent() { + void _clearPendingEmailContent() { if (_pendingEmailContentInfo.isClosed) { _pendingEmailContentInfo = BehaviorSubject.seeded(null); } else { @@ -46,7 +46,7 @@ class EmailReceiveManager { } } - void clearPendingEmailAddress() { + void _clearPendingEmailAddress() { if(_pendingEmailAddressInfo.isClosed) { _pendingEmailAddressInfo = BehaviorSubject.seeded(null); } else { @@ -56,22 +56,20 @@ class EmailReceiveManager { void closeEmailReceiveManagerStream() { _pendingEmailAddressInfo.close(); + _pendingEmailContentInfo.close(); + _pendingFileInfo.close(); } void setPendingFileInfo(List list) async { - clearPendingFileInfo(); + _clearPendingFileInfo(); _pendingFileInfo.add(list); } - void clearPendingFileInfo() { + void _clearPendingFileInfo() { if(_pendingFileInfo.isClosed) { _pendingFileInfo = BehaviorSubject.seeded(List.empty(growable: true)); } else { _pendingFileInfo.add(List.empty(growable: true)); } } - - void closeFileSharingStream() { - _pendingFileInfo.close(); - } } \ No newline at end of file From dd4c9d9d49f23b3d53608f8835c45f1953c4783e Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 13 Jun 2024 15:09:12 +0700 Subject: [PATCH 4/8] TF-2584 Remove toolbox buttons in keyboard header and move to app bar of composer in mobile --- .../composer/presentation/composer_view.dart | 20 +++++----- .../rich_text_mobile_tablet_controller.dart | 25 ++++++++++++ .../mobile_app_bar_composer_widget_style.dart | 4 +- .../view/mobile/mobile_container_view.dart | 39 ++----------------- .../view/mobile/tablet_container_view.dart | 3 +- .../mobile/app_bar_composer_widget.dart | 24 +++++++++--- .../landscape_app_bar_composer_widget.dart | 24 +++++++++--- 7 files changed, 78 insertions(+), 61 deletions(-) diff --git a/lib/features/composer/presentation/composer_view.dart b/lib/features/composer/presentation/composer_view.dart index fd7318e3cc..1860f9e2ba 100644 --- a/lib/features/composer/presentation/composer_view.dart +++ b/lib/features/composer/presentation/composer_view.dart @@ -36,18 +36,8 @@ class ComposerView extends GetWidget { return ResponsiveWidget( responsiveUtils: controller.responsiveUtils, mobile: MobileContainerView( - keyboardRichTextController: controller.richTextMobileTabletController!.richTextController, onCloseViewAction: () => controller.handleClickCloseComposer(context), onClearFocusAction: () => controller.clearFocus(context), - onAttachFileAction: () => controller.isNetworkConnectionAvailable - ? controller.openPickAttachmentMenu( - context, - _pickAttachmentsActionTiles(context) - ) - : null, - onInsertImageAction: (constraints) => controller.isNetworkConnectionAvailable - ? controller.insertImage(context, constraints.maxWidth) - : null, backgroundColor: MobileAppBarComposerWidgetStyle.backgroundColor, childBuilder: (context, constraints) => SafeArea( left: !controller.responsiveUtils.isLandscapeMobile(context), @@ -75,6 +65,11 @@ class ComposerView extends GetWidget { _pickAttachmentsActionTiles(context) ), insertImageAction: () => controller.insertImage(context, constraints.maxWidth), + openRichToolbarAction: () => + controller.richTextMobileTabletController?.showFormatStyleBottomSheet( + context: context, + richTextController: controller.richTextMobileTabletController?.richTextController + ), )) else Obx(() => AppBarComposerWidget( @@ -95,6 +90,11 @@ class ComposerView extends GetWidget { _pickAttachmentsActionTiles(context) ), insertImageAction: () => controller.insertImage(context, constraints.maxWidth), + openRichToolbarAction: () => + controller.richTextMobileTabletController?.showFormatStyleBottomSheet( + context: context, + richTextController: controller.richTextMobileTabletController?.richTextController + ), )), Expanded( child: SafeArea( diff --git a/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart b/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart index 4f349ba97b..953cea15b7 100644 --- a/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart +++ b/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart @@ -1,12 +1,15 @@ import 'dart:io'; +import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/html/html_utils.dart'; import 'package:file_picker/file_picker.dart'; +import 'package:flutter/cupertino.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:tmail_ui_user/features/composer/presentation/controller/base_rich_text_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/header_style_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class RichTextMobileTabletController extends BaseRichTextController { HtmlEditorApi? htmlEditorApi; @@ -46,6 +49,28 @@ class RichTextMobileTabletController extends BaseRichTextController { } } + Future showFormatStyleBottomSheet({ + required BuildContext context, + required RichTextController? richTextController + }) async { + if (Platform.isAndroid) { + await htmlEditorApi?.storeSelectionRange(); + KeyboardUtils.hideSystemKeyboardMobile(); + } else { + await htmlEditorApi?.unfocus(); + } + + if (context.mounted) { + richTextController?.showRichTextBottomSheet( + context: context, + titleFormatBottomSheet: AppLocalizations.of(context).titleFormat, + titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles, + titleForegroundBottomSheet: AppLocalizations.of(context).titleForeground, + titleBackgroundBottomSheet: AppLocalizations.of(context).titleBackground, + ); + } + } + @override void onClose() { richTextController.dispose(); diff --git a/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart b/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart index 9496250503..a3cc769e42 100644 --- a/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart +++ b/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart @@ -7,7 +7,7 @@ class MobileAppBarComposerWidgetStyle { static const double iconSize = 24; static const double space = 12; static const double iconRadius = 8; - static const double sendButtonIconSize = 28; + static const double sendButtonIconSize = 30; static const double richTextIconSize = 28; static const Color backgroundColor = AppColor.colorComposerAppBar; @@ -17,5 +17,5 @@ class MobileAppBarComposerWidgetStyle { static const EdgeInsetsGeometry padding = EdgeInsetsDirectional.symmetric(horizontal: 12); static const EdgeInsetsGeometry iconPadding = EdgeInsetsDirectional.all(3); - static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(2); + static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(5); } \ No newline at end of file diff --git a/lib/features/composer/presentation/view/mobile/mobile_container_view.dart b/lib/features/composer/presentation/view/mobile/mobile_container_view.dart index de1ffcd81c..5e67b80061 100644 --- a/lib/features/composer/presentation/view/mobile/mobile_container_view.dart +++ b/lib/features/composer/presentation/view/mobile/mobile_container_view.dart @@ -1,33 +1,18 @@ -import 'package:core/presentation/utils/responsive_utils.dart'; -import 'package:core/utils/app_logger.dart'; import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:rich_text_composer/rich_text_composer.dart' as rich_composer; -import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/mobile/mobile_container_view_style.dart'; -import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; - -typedef OnInsertImageAction = Function(BoxConstraints constraints); class MobileContainerView extends StatelessWidget { final Widget Function(BuildContext context, BoxConstraints constraints) childBuilder; - final rich_composer.RichTextController keyboardRichTextController; final VoidCallback onCloseViewAction; - final VoidCallback? onAttachFileAction; - final OnInsertImageAction? onInsertImageAction; final VoidCallback? onClearFocusAction; final Color? backgroundColor; - final _responsiveUtils = Get.find(); - - MobileContainerView({ + const MobileContainerView({ super.key, required this.childBuilder, - required this.keyboardRichTextController, required this.onCloseViewAction, - this.onAttachFileAction, - this.onInsertImageAction, this.onClearFocusAction, this.backgroundColor, }); @@ -48,25 +33,7 @@ class MobileContainerView extends StatelessWidget { backgroundColor: backgroundColor ?? MobileContainerViewStyle.outSideBackgroundColor, resizeToAvoidBottomInset: false, body: LayoutBuilder(builder: (context, constraints) { - return rich_composer.KeyboardRichText( - richTextController: keyboardRichTextController, - keyBroadToolbar: RichTextKeyboardToolBar( - backgroundKeyboardToolBarColor: MobileContainerViewStyle.keyboardToolbarBackgroundColor, - isLandScapeMode: _responsiveUtils.isLandscapeMobile(context), - insertAttachment: onAttachFileAction, - insertImage: () => onInsertImageAction != null - ? onInsertImageAction!(constraints) - : null, - richTextController: keyboardRichTextController, - titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles, - titleBackgroundBottomSheet: AppLocalizations.of(context).titleBackground, - titleForegroundBottomSheet: AppLocalizations.of(context).titleForeground, - titleFormatBottomSheet: AppLocalizations.of(context).titleFormat, - titleBack: AppLocalizations.of(context).format, - ), - paddingChild: EdgeInsets.zero, - child: childBuilder(context, constraints), - ); + return childBuilder(context, constraints); }) ), ) diff --git a/lib/features/composer/presentation/view/mobile/tablet_container_view.dart b/lib/features/composer/presentation/view/mobile/tablet_container_view.dart index 9af4547939..a45ccb8ef5 100644 --- a/lib/features/composer/presentation/view/mobile/tablet_container_view.dart +++ b/lib/features/composer/presentation/view/mobile/tablet_container_view.dart @@ -5,9 +5,10 @@ import 'package:get/get.dart'; 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/styles/mobile/tablet_container_view_style.dart'; -import 'package:tmail_ui_user/features/composer/presentation/view/mobile/mobile_container_view.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +typedef OnInsertImageAction = Function(BoxConstraints constraints); + class TabletContainerView extends StatelessWidget { final Widget Function(BuildContext context, BoxConstraints constraints) childBuilder; diff --git a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart index 86e2c3903a..e9ccfa0307 100644 --- a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart @@ -12,8 +12,9 @@ class AppBarComposerWidget extends StatelessWidget { final bool isNetworkConnectionAvailable; final VoidCallback onCloseViewAction; final VoidCallback sendMessageAction; - final VoidCallback attachFileAction; - final VoidCallback insertImageAction; + final VoidCallback? attachFileAction; + final VoidCallback? insertImageAction; + final VoidCallback openRichToolbarAction; final OnOpenContextMenuAction openContextMenuAction; final _imagePaths = Get.find(); @@ -24,9 +25,10 @@ class AppBarComposerWidget extends StatelessWidget { required this.onCloseViewAction, required this.sendMessageAction, required this.openContextMenuAction, - required this.attachFileAction, - required this.insertImageAction, + required this.openRichToolbarAction, this.isNetworkConnectionAvailable = false, + this.attachFileAction, + this.insertImageAction, }); @override @@ -47,8 +49,18 @@ class AppBarComposerWidget extends StatelessWidget { onTapActionCallback: onCloseViewAction ), const Spacer(), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icRichToolbar, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize, + padding: MobileAppBarComposerWidgetStyle.richTextIconPadding, + tooltipMessage: AppLocalizations.of(context).formattingOptions, + onTapActionCallback: openRichToolbarAction, + ), if (isNetworkConnectionAvailable) ...[ + const SizedBox(width: 4), TMailButtonWidget.fromIcon( icon: _imagePaths.icAttachFile, iconColor: MobileAppBarComposerWidgetStyle.iconColor, @@ -57,7 +69,7 @@ class AppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).attach_file, onTapActionCallback: attachFileAction, ), - const SizedBox(width: 8), + const SizedBox(width: 4), TMailButtonWidget.fromIcon( icon: _imagePaths.icInsertImage, iconColor: MobileAppBarComposerWidgetStyle.iconColor, @@ -66,7 +78,7 @@ class AppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).insertImage, onTapActionCallback: insertImageAction, ), - const SizedBox(width: 8), + const SizedBox(width: 4), ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled diff --git a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart index 07603d9b17..bb7cbd1834 100644 --- a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart @@ -12,8 +12,9 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { final bool isNetworkConnectionAvailable; final VoidCallback onCloseViewAction; final VoidCallback sendMessageAction; - final VoidCallback attachFileAction; - final VoidCallback insertImageAction; + final VoidCallback? attachFileAction; + final VoidCallback? insertImageAction; + final VoidCallback openRichToolbarAction; final OnOpenContextMenuAction openContextMenuAction; final _imagePaths = Get.find(); @@ -24,9 +25,10 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { required this.onCloseViewAction, required this.sendMessageAction, required this.openContextMenuAction, - required this.attachFileAction, - required this.insertImageAction, + required this.openRichToolbarAction, this.isNetworkConnectionAvailable = false, + this.attachFileAction, + this.insertImageAction, }); @override @@ -50,8 +52,18 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { onTapActionCallback: onCloseViewAction ), const Spacer(), + TMailButtonWidget.fromIcon( + icon: _imagePaths.icRichToolbar, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + backgroundColor: Colors.transparent, + iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize, + padding: MobileAppBarComposerWidgetStyle.richTextIconPadding, + tooltipMessage: AppLocalizations.of(context).formattingOptions, + onTapActionCallback: openRichToolbarAction, + ), if (isNetworkConnectionAvailable) ...[ + const SizedBox(width: 4), TMailButtonWidget.fromIcon( icon: _imagePaths.icAttachFile, iconColor: MobileAppBarComposerWidgetStyle.iconColor, @@ -60,7 +72,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).attach_file, onTapActionCallback: attachFileAction, ), - const SizedBox(width: 8), + const SizedBox(width: 4), TMailButtonWidget.fromIcon( icon: _imagePaths.icInsertImage, iconColor: MobileAppBarComposerWidgetStyle.iconColor, @@ -69,7 +81,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).insertImage, onTapActionCallback: insertImageAction, ), - const SizedBox(width: 8), + const SizedBox(width: 4), ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled From 46ad8135d053ae980bea6b8b262655019ab67b17 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 16 Apr 2024 19:32:17 +0700 Subject: [PATCH 5/8] TF-2584 Update correct icon for toolbox buttons of composer in mobile --- assets/images/ic_send_disable.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/images/ic_send_disable.svg b/assets/images/ic_send_disable.svg index d2ce6d5d23..69097aeeb1 100644 --- a/assets/images/ic_send_disable.svg +++ b/assets/images/ic_send_disable.svg @@ -1,3 +1,3 @@ - + From 0f405f385a0f8a3da79dcfdbe8f7891a2c07edaf Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 16 Apr 2024 19:51:38 +0700 Subject: [PATCH 6/8] TF-2584 Update padding toolbox buttons of composer in mobile --- .../mobile_app_bar_composer_widget_style.dart | 3 +-- .../widgets/mobile/app_bar_composer_widget.dart | 8 +++----- .../mobile/landscape_app_bar_composer_widget.dart | 8 +++----- .../mobile_responsive_app_bar_composer_widget.dart | 14 ++------------ 4 files changed, 9 insertions(+), 24 deletions(-) diff --git a/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart b/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart index a3cc769e42..827574f819 100644 --- a/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart +++ b/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart @@ -5,8 +5,7 @@ import 'package:flutter/material.dart'; class MobileAppBarComposerWidgetStyle { static const double height = 56; static const double iconSize = 24; - static const double space = 12; - static const double iconRadius = 8; + static const double space = 4; static const double sendButtonIconSize = 30; static const double richTextIconSize = 28; diff --git a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart index e9ccfa0307..0200424ec8 100644 --- a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart @@ -45,7 +45,6 @@ class AppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).saveAndClose, iconSize: MobileAppBarComposerWidgetStyle.iconSize, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - padding: MobileAppBarComposerWidgetStyle.iconPadding, onTapActionCallback: onCloseViewAction ), const Spacer(), @@ -60,7 +59,7 @@ class AppBarComposerWidget extends StatelessWidget { ), if (isNetworkConnectionAvailable) ...[ - const SizedBox(width: 4), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( icon: _imagePaths.icAttachFile, iconColor: MobileAppBarComposerWidgetStyle.iconColor, @@ -69,7 +68,7 @@ class AppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).attach_file, onTapActionCallback: attachFileAction, ), - const SizedBox(width: 4), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( icon: _imagePaths.icInsertImage, iconColor: MobileAppBarComposerWidgetStyle.iconColor, @@ -78,7 +77,7 @@ class AppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).insertImage, onTapActionCallback: insertImageAction, ), - const SizedBox(width: 4), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled @@ -94,7 +93,6 @@ class AppBarComposerWidget extends StatelessWidget { TMailButtonWidget.fromIcon( icon: _imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, diff --git a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart index bb7cbd1834..2d74fc0566 100644 --- a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart @@ -48,7 +48,6 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).saveAndClose, iconSize: MobileAppBarComposerWidgetStyle.iconSize, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - padding: MobileAppBarComposerWidgetStyle.iconPadding, onTapActionCallback: onCloseViewAction ), const Spacer(), @@ -63,7 +62,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { ), if (isNetworkConnectionAvailable) ...[ - const SizedBox(width: 4), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( icon: _imagePaths.icAttachFile, iconColor: MobileAppBarComposerWidgetStyle.iconColor, @@ -72,7 +71,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).attach_file, onTapActionCallback: attachFileAction, ), - const SizedBox(width: 4), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( icon: _imagePaths.icInsertImage, iconColor: MobileAppBarComposerWidgetStyle.iconColor, @@ -81,7 +80,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).insertImage, onTapActionCallback: insertImageAction, ), - const SizedBox(width: 4), + const SizedBox(width: MobileAppBarComposerWidgetStyle.space), ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled @@ -97,7 +96,6 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { TMailButtonWidget.fromIcon( icon: _imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, diff --git a/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart index 72cd05b5c1..5c7b0790e3 100644 --- a/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart @@ -48,13 +48,11 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget { tooltipMessage: AppLocalizations.of(context).saveAndClose, iconSize: MobileAppBarComposerWidgetStyle.iconSize, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - padding: MobileAppBarComposerWidgetStyle.iconPadding, onTapActionCallback: onCloseViewAction ), const Spacer(), TMailButtonWidget.fromIcon( icon: _imagePaths.icRichToolbar, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, padding: MobileAppBarComposerWidgetStyle.richTextIconPadding, backgroundColor: isFormattingOptionsEnabled ? MobileAppBarComposerWidgetStyle.selectedBackgroundColor @@ -70,27 +68,21 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget { TMailButtonWidget.fromIcon( icon: _imagePaths.icAttachFile, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, - padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, tooltipMessage: AppLocalizations.of(context).attach_file, onTapActionCallback: attachFileAction, ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), - AbsorbPointer( - absorbing: isCodeViewEnabled, - child: TMailButtonWidget.fromIcon( + if (!isCodeViewEnabled) + TMailButtonWidget.fromIcon( icon: _imagePaths.icInsertImage, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, - padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, tooltipMessage: AppLocalizations.of(context).insertImage, onTapActionCallback: insertImageAction, ), - ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( icon: isSendButtonEnabled @@ -106,9 +98,7 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget { TMailButtonWidget.fromIcon( icon: _imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, - borderRadius: MobileAppBarComposerWidgetStyle.iconRadius, backgroundColor: Colors.transparent, - padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.iconSize, tooltipMessage: AppLocalizations.of(context).more, onTapActionAtPositionCallback: openContextMenuAction, From 0a1d3defe477dbd17e4503514cd736bb8037fb77 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 21 Jun 2024 11:05:28 +0700 Subject: [PATCH 7/8] TF-2584 Update `enough_html_editor` in pubspec --- pubspec.lock | 6 +++--- pubspec.yaml | 5 ----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 1560c58cac..a5478ce23b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -433,11 +433,11 @@ packages: source: path version: "1.0.0+1" enough_html_editor: - dependency: "direct overridden" + dependency: transitive description: path: "." - ref: cherry-pick-add-attachment-app-bar - resolved-ref: "195c74a0d65fc95226dbd257a40bc8c0c55f9a3e" + ref: cnb_supported + resolved-ref: "532bc9de03c273ec88db7bd66436c808b570a934" url: "https://github.com/linagora/enough_html_editor.git" source: git version: "0.0.5" diff --git a/pubspec.yaml b/pubspec.yaml index 8c5a7fc17b..b3628eb82c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -280,11 +280,6 @@ dependency_overrides: url: https://github.com/linagora/flutter_file_picker ref: email_supported_5.3.1 - enough_html_editor: - git: - url: https://github.com/linagora/enough_html_editor.git - ref: cherry-pick-add-attachment-app-bar - # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From b6e869f3f1bc7d70b96f0a7e4b1cf31476750acc Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 24 Jun 2024 12:09:20 +0700 Subject: [PATCH 8/8] TF-2532 Remove `attachment/inlineImage` icon in keyboard toolbar on tablet --- lib/features/composer/presentation/composer_view.dart | 9 --------- .../presentation/view/mobile/tablet_container_view.dart | 4 ++-- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/lib/features/composer/presentation/composer_view.dart b/lib/features/composer/presentation/composer_view.dart index 1860f9e2ba..a805c443f8 100644 --- a/lib/features/composer/presentation/composer_view.dart +++ b/lib/features/composer/presentation/composer_view.dart @@ -243,15 +243,6 @@ class ComposerView extends GetWidget { keyboardRichTextController: controller.richTextMobileTabletController!.richTextController, onCloseViewAction: () => controller.handleClickCloseComposer(context), onClearFocusAction: () => controller.clearFocus(context), - onAttachFileAction: () => controller.isNetworkConnectionAvailable - ? controller.openPickAttachmentMenu( - context, - _pickAttachmentsActionTiles(context) - ) - : null, - onInsertImageAction: (constraints) => controller.isNetworkConnectionAvailable - ? controller.insertImage(context, constraints.maxWidth) - : null, childBuilder: (context, constraints) => Container( color: ComposerStyle.mobileBackgroundColor, child: Column( diff --git a/lib/features/composer/presentation/view/mobile/tablet_container_view.dart b/lib/features/composer/presentation/view/mobile/tablet_container_view.dart index a45ccb8ef5..511599fff5 100644 --- a/lib/features/composer/presentation/view/mobile/tablet_container_view.dart +++ b/lib/features/composer/presentation/view/mobile/tablet_container_view.dart @@ -51,8 +51,8 @@ class TabletContainerView extends StatelessWidget { backgroundKeyboardToolBarColor: TabletContainerViewStyle.keyboardToolbarBackgroundColor, isLandScapeMode: _responsiveUtils.isLandscapeMobile(context), insertAttachment: onAttachFileAction, - insertImage: () => onInsertImageAction != null - ? onInsertImageAction!(constraints) + insertImage: onInsertImageAction != null + ? () => onInsertImageAction!(constraints) : null, richTextController: keyboardRichTextController, titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles,