From 657afb67b9dfa95c9a15a42244e26e93b7406ae7 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 6 Jul 2023 16:19:15 +0700 Subject: [PATCH] TF-1957 Fix name of attachments are reversed in RTL mode (cherry picked from commit 8f8efa90f6f2488867b236261cc27145d7e9716f) --- assets/images/ic_arrow_bottom.svg | 5 ++ assets/images/ic_arrow_left.svg | 5 ++ assets/images/ic_arrow_right.svg | 5 ++ .../presentation/resources/image_paths.dart | 3 + .../attachment_file_composer_builder.dart | 25 +++++-- .../top_bar_destination_picker_builder.dart | 15 ++-- .../widgets/attachment_file_tile_builder.dart | 68 ++++++++++++------- .../mailbox/presentation/mailbox_view.dart | 4 +- .../mixin/mailbox_widget_mixin.dart | 6 +- .../widgets/mailbox_folder_tile_builder.dart | 18 ++--- pubspec.lock | 16 +++++ pubspec.yaml | 2 + 12 files changed, 113 insertions(+), 59 deletions(-) create mode 100644 assets/images/ic_arrow_bottom.svg create mode 100644 assets/images/ic_arrow_left.svg create mode 100644 assets/images/ic_arrow_right.svg diff --git a/assets/images/ic_arrow_bottom.svg b/assets/images/ic_arrow_bottom.svg new file mode 100644 index 000000000..20bc50dc4 --- /dev/null +++ b/assets/images/ic_arrow_bottom.svg @@ -0,0 +1,5 @@ + + + diff --git a/assets/images/ic_arrow_left.svg b/assets/images/ic_arrow_left.svg new file mode 100644 index 000000000..2859a8d7c --- /dev/null +++ b/assets/images/ic_arrow_left.svg @@ -0,0 +1,5 @@ + + + diff --git a/assets/images/ic_arrow_right.svg b/assets/images/ic_arrow_right.svg new file mode 100644 index 000000000..3b2c446e4 --- /dev/null +++ b/assets/images/ic_arrow_right.svg @@ -0,0 +1,5 @@ + + + diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart index f21ac42af..a58751a4b 100644 --- a/core/lib/presentation/resources/image_paths.dart +++ b/core/lib/presentation/resources/image_paths.dart @@ -190,6 +190,9 @@ class ImagePaths { String get icDelivering => _getImagePath('ic_delivering.svg'); String get icError => _getImagePath('ic_error.svg'); String get icConnectedInternet => _getImagePath('ic_connected_internet.svg'); + String get icArrowBottom => _getImagePath('ic_arrow_bottom.svg'); + String get icArrowLeft => _getImagePath('ic_arrow_left.svg'); + String get icArrowRight => _getImagePath('ic_arrow_right.svg'); String _getImagePath(String imageName) { return AssetsPaths.images + imageName; diff --git a/lib/features/composer/presentation/widgets/attachment_file_composer_builder.dart b/lib/features/composer/presentation/widgets/attachment_file_composer_builder.dart index ed74e2dac..42dea8210 100644 --- a/lib/features/composer/presentation/widgets/attachment_file_composer_builder.dart +++ b/lib/features/composer/presentation/widgets/attachment_file_composer_builder.dart @@ -5,6 +5,7 @@ import 'package:core/presentation/utils/style_utils.dart'; import 'package:core/presentation/views/button/icon_button_web.dart'; import 'package:core/utils/direction_utils.dart'; import 'package:core/utils/platform_info.dart'; +import 'package:extended_text/extended_text.dart'; import 'package:filesize/filesize.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -73,15 +74,29 @@ class AttachmentFileComposerBuilder extends StatelessWidget with AppLoaderMixin 0.0), child: Padding( padding: const EdgeInsetsDirectional.only(end: PlatformInfo.isWeb ? 20 : 16), - child: Text( + child: ExtendedText( fileState.fileName, maxLines: 1, - softWrap: CommonTextStyle.defaultSoftWrap, overflow: CommonTextStyle.defaultTextOverFlow, + softWrap: CommonTextStyle.defaultSoftWrap, + overflowWidget: TextOverflowWidget( + position: Directionality.maybeOf(context) == TextDirection.rtl + ? TextOverflowPosition.start + : TextOverflowPosition.end, + child: const Text( + '...', + style: TextStyle( + fontSize: 12, + color: Colors.black, + fontWeight: FontWeight.w500 + ), + ), + ), style: const TextStyle( - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.w500), + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.w500 + ), ), ) ), diff --git a/lib/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart b/lib/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart index b6b11f9bd..192efc65c 100644 --- a/lib/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart +++ b/lib/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart @@ -7,7 +7,6 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; -import 'package:tmail_ui_user/main/utils/app_utils.dart'; typedef OnCreateNewMailboxAction = Function(); typedef OnOpenCreateNewMailboxScreenAction = Function(); @@ -62,12 +61,9 @@ class TopBarDestinationPickerBuilder extends StatelessWidget { fontWeight: FontWeight.w700))), if (_destinationScreenType == DestinationScreenType.destinationPicker) Padding( - padding: EdgeInsets.only( - left: AppUtils.isDirectionRTL(context) ? 0 : 8, - right: AppUtils.isDirectionRTL(context) ? 8 : 0, - ), + padding: const EdgeInsetsDirectional.only(start: 8), child: Align( - alignment: Alignment.centerLeft, + alignment: AlignmentDirectional.centerStart, child: buildIconWeb( iconSize: 24, colorSelected: Colors.white, @@ -80,12 +76,9 @@ class TopBarDestinationPickerBuilder extends StatelessWidget { ) else Padding( - padding: EdgeInsets.only( - left: AppUtils.isDirectionRTL(context) ? 0 : 8, - right: AppUtils.isDirectionRTL(context) ? 8 : 0, - ), + padding: const EdgeInsetsDirectional.only(start: 8), child: Align( - alignment: Alignment.centerLeft, + alignment: AlignmentDirectional.centerStart, child: Material( color: Colors.transparent, child: InkWell( diff --git a/lib/features/email/presentation/widgets/attachment_file_tile_builder.dart b/lib/features/email/presentation/widgets/attachment_file_tile_builder.dart index cd0547fa9..a20125a3a 100644 --- a/lib/features/email/presentation/widgets/attachment_file_tile_builder.dart +++ b/lib/features/email/presentation/widgets/attachment_file_tile_builder.dart @@ -1,10 +1,14 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:core/presentation/utils/style_utils.dart'; +import 'package:extended_text/extended_text.dart'; import 'package:filesize/filesize.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; -import 'package:model/model.dart'; +import 'package:model/email/attachment.dart'; import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart'; typedef OnDownloadAttachmentFileActionClick = void Function(Attachment attachment); @@ -52,30 +56,44 @@ class AttachmentFileTileBuilder extends StatelessWidget{ fit: BoxFit.fill), const SizedBox(width: 8), Expanded(child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - _attachment.name ?? '', - maxLines: 1, - overflow: CommonTextStyle.defaultTextOverFlow, - softWrap: CommonTextStyle.defaultSoftWrap, - style: const TextStyle( - fontSize: 14, - color: AppColor.attachmentFileNameColor, - fontWeight: FontWeight.normal), + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ExtendedText( + (_attachment.name ?? ''), + maxLines: 1, + overflow: CommonTextStyle.defaultTextOverFlow, + softWrap: CommonTextStyle.defaultSoftWrap, + overflowWidget: TextOverflowWidget( + position: Directionality.maybeOf(context) == TextDirection.rtl + ? TextOverflowPosition.start + : TextOverflowPosition.end, + child: const Text( + "...", + style: TextStyle( + fontSize: 12, + color: AppColor.attachmentFileNameColor, + fontWeight: FontWeight.normal + ), ), - const SizedBox(height: 4), - Text( - filesize(_attachment.size?.value), - maxLines: 1, - overflow: CommonTextStyle.defaultTextOverFlow, - softWrap: CommonTextStyle.defaultSoftWrap, - style: const TextStyle( - fontSize: 12, - color: AppColor.attachmentFileSizeColor, - fontWeight: FontWeight.normal), - ) - ] + ), + style: const TextStyle( + fontSize: 14, + color: AppColor.attachmentFileNameColor, + fontWeight: FontWeight.normal + ), + ), + const SizedBox(height: 4), + Text( + filesize(_attachment.size?.value), + maxLines: 1, + overflow: CommonTextStyle.defaultTextOverFlow, + softWrap: CommonTextStyle.defaultSoftWrap, + style: const TextStyle( + fontSize: 12, + color: AppColor.attachmentFileSizeColor, + fontWeight: FontWeight.normal), + ) + ] )) ]), ), diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index f06a2cbf3..3bf532c8e 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -270,8 +270,8 @@ class MailboxView extends BaseMailboxView { splashRadius: 15, icon: SvgPicture.asset( categories.getExpandMode(controller.mailboxCategoriesExpandMode.value) == ExpandMode.EXPAND - ? imagePaths.icExpandFolder - : DirectionUtils.isDirectionRTLByLanguage(context) ? imagePaths.icBack : imagePaths.icCollapseFolder, + ? imagePaths.icArrowBottom + : DirectionUtils.isDirectionRTLByLanguage(context) ? imagePaths.icArrowLeft : imagePaths.icArrowRight, colorFilter: AppColor.primaryColor.asFilter(), fit: BoxFit.fill), tooltip: AppLocalizations.of(context).collapse, diff --git a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart index 7e4426894..cdcf0e33b 100644 --- a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart +++ b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart @@ -300,8 +300,8 @@ mixin MailboxWidgetMixin { minSize: 12, icon: SvgPicture.asset( expandMode == ExpandMode.EXPAND - ? imagePaths.icExpandFolder - : DirectionUtils.isDirectionRTLByLanguage(context) ? imagePaths.icBack : imagePaths.icCollapseFolder, + ? imagePaths.icArrowBottom + : DirectionUtils.isDirectionRTLByLanguage(context) ? imagePaths.icArrowLeft : imagePaths.icArrowRight, colorFilter: AppColor.primaryColor.asFilter(), fit: BoxFit.fill ), @@ -359,7 +359,7 @@ mixin MailboxWidgetMixin { MailboxController controller ) { return Padding( - padding: const EdgeInsetsDirectional.only(start: 32, bottom: 8, end: 4), + padding: const EdgeInsetsDirectional.only(start: 32, end: 4), child: Row(children: [ SvgPicture.asset( imagePaths.icAppDashboard, diff --git a/lib/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart b/lib/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart index 9d56e4c87..d98054b4f 100644 --- a/lib/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart +++ b/lib/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart @@ -107,9 +107,6 @@ class MailBoxFolderTileBuilder { color: backgroundColorItem), padding: const EdgeInsets.all(8), child: Row( - crossAxisAlignment: _mailboxNode.item.isTeamMailboxes - ? CrossAxisAlignment.start - : CrossAxisAlignment.end, children: [ _buildLeadingMailboxItem(context), const SizedBox(width: 4), @@ -138,9 +135,6 @@ class MailBoxFolderTileBuilder { mainAxisAlignment: MainAxisAlignment.center, children: [ Row( - crossAxisAlignment: _mailboxNode.item.isTeamMailboxes - ? CrossAxisAlignment.start - : CrossAxisAlignment.center, children: [ _buildLeadingMailboxItem(context), const SizedBox(width: 8), @@ -194,16 +188,16 @@ class MailBoxFolderTileBuilder { buildIconWeb( icon: SvgPicture.asset( _mailboxNode.expandMode == ExpandMode.EXPAND - ? _imagePaths.icExpandFolder - : DirectionUtils.isDirectionRTLByLanguage(context) ? _imagePaths.icBack : _imagePaths.icCollapseFolder, + ? _imagePaths.icArrowBottom + : DirectionUtils.isDirectionRTLByLanguage(context) ? _imagePaths.icArrowLeft : _imagePaths.icArrowRight, colorFilter: _mailboxNode.item.allowedToDisplay ? AppColor.primaryColor.asFilter() : AppColor.colorIconUnSubscribedMailbox.asFilter(), - fit: BoxFit.fill + fit: BoxFit.fill, ), - minSize: 12, - splashRadius: 10, + splashRadius: 12, iconPadding: EdgeInsets.zero, + minSize: 15, tooltip: _mailboxNode.expandMode == ExpandMode.EXPAND ? AppLocalizations.of(_context).collapse : AppLocalizations.of(_context).expand, @@ -288,10 +282,8 @@ class MailBoxFolderTileBuilder { Widget _buildTitleFolderItem(BuildContext context, {bool showTrailingItem = true}) { return Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( - crossAxisAlignment: CrossAxisAlignment.end, children: [ Expanded( child: TextOverflowBuilder( diff --git a/pubspec.lock b/pubspec.lock index 9bf2d5636..8894259f1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -385,6 +385,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.5" + extended_text: + dependency: "direct main" + description: + name: extended_text + sha256: "3f555a60f63ff51d5080f5eed89e65bc18f17b69e01f4e16cadfd0cb3b49f42a" + url: "https://pub.dev" + source: hosted + version: "10.0.1" + extended_text_library: + dependency: transitive + description: + name: extended_text_library + sha256: "6d06b0ac53a09989e9864549f133c19c676d1456c5ee9470e2483f3cb1900f6e" + url: "https://pub.dev" + source: hosted + version: "10.0.0" external_app_launcher: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 625a53aed..d54c4f7b9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -199,6 +199,8 @@ dependencies: flutter_keyboard_visibility: 5.4.1 + extended_text: 10.0.1 + dev_dependencies: flutter_test: sdk: flutter