Compose email with text style for mobile

This commit is contained in:
ManhNTX
2022-07-15 16:16:56 +07:00
committed by Dat H. Pham
parent e52617fd24
commit a9a85ba621
4 changed files with 89 additions and 3 deletions
@@ -13,6 +13,8 @@ import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/composer/domain/state/upload_attachment_state.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/mixin/rich_text_button_mixin.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/rich_text_style_type.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/attachment_file_composer_builder.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/email_address_input_builder.dart';
import 'package:tmail_ui_user/features/upload/presentation/extensions/list_upload_file_state_extension.dart';
@@ -20,7 +22,7 @@ import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_sta
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ComposerView extends GetWidget<ComposerController> with AppLoaderMixin {
class ComposerView extends GetWidget<ComposerController> with AppLoaderMixin, RichTextButtonMixin {
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
@@ -461,6 +463,11 @@ class ComposerView extends GetWidget<ComposerController> with AppLoaderMixin {
Padding(
padding: const EdgeInsets.only(left: 60, right: 25),
child: Column(children: [
Padding(
padding: const EdgeInsets.only(left: 22, top: 15),
child: Obx(() => _buildRowIconStyleText()),
),
const SizedBox(height: 8),
Obx(() {
final uploadAttachments = controller.uploadController.listUploadAttachments;
if (uploadAttachments.isEmpty) {
@@ -490,6 +497,40 @@ class ComposerView extends GetWidget<ComposerController> with AppLoaderMixin {
);
}
Widget _buildRowIconStyleText() {
return Row(
children: [
buildIconStyleText(
path: RichTextStyleType.bold.getIcon(imagePaths),
isSelected: controller.richTextMobileTabletController.isTextStyleTypeSelected(RichTextStyleType.bold),
onTap: () async {
await controller.htmlEditorApi?.formatBold().then((value) {
controller.richTextMobileTabletController.selectTextStyleType(RichTextStyleType.bold);
});
}
),
buildIconStyleText(
path: RichTextStyleType.italic.getIcon(imagePaths),
isSelected: controller.richTextMobileTabletController.isTextStyleTypeSelected(RichTextStyleType.italic),
onTap: () async {
await controller.htmlEditorApi?.formatItalic().then((value) {
controller.richTextMobileTabletController.selectTextStyleType(RichTextStyleType.italic);
});
}
),
buildIconStyleText(
path: RichTextStyleType.underline.getIcon(imagePaths),
isSelected: controller.richTextMobileTabletController.isTextStyleTypeSelected(RichTextStyleType.underline),
onTap: () async {
await controller.htmlEditorApi?.formatUnderline().then((value) {
controller.richTextMobileTabletController.selectTextStyleType(RichTextStyleType.underline);
});
}
),
],
);
}
Widget _buildComposerEditor(BuildContext context) {
return Obx(() {
final argsComposer = controller.composerArguments.value;
@@ -542,7 +583,10 @@ class ComposerView extends GetWidget<ComposerController> with AppLoaderMixin {
key: const Key('composer_editor'),
minHeight: 550,
initialContent: initialContent,
onCreated: (editorApi) => controller.htmlEditorApi = editorApi);
onCreated: (editorApi) {
controller.richTextMobileTabletController.htmlEditorApi = editorApi;
controller.richTextMobileTabletController.listenHtmlEditorApi();
});
}
Widget _buildAttachmentsLoadingView({EdgeInsets? padding, double? size}) {