diff --git a/core/lib/utils/platform_info.dart b/core/lib/utils/platform_info.dart index 9256e0650..6978807b3 100644 --- a/core/lib/utils/platform_info.dart +++ b/core/lib/utils/platform_info.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:core/utils/app_logger.dart'; +import 'package:core/utils/web_renderer/canvas_kit.dart'; import 'package:flutter/foundation.dart'; abstract class PlatformInfo { @@ -13,7 +14,7 @@ abstract class PlatformInfo { static bool get isAndroid => !kIsWeb && Platform.isAndroid; static bool get isMobile => isAndroid || isIOS; static bool get isDesktop => isLinux || isWindows || isMacOS; - static bool get isWebMobile => kIsWeb && (defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.android); + static bool get isCanvasKit => isRendererCanvasKit; static String get platformNameOS { var platformName = ''; diff --git a/core/lib/utils/web_renderer/canvas_kit.dart b/core/lib/utils/web_renderer/canvas_kit.dart new file mode 100644 index 000000000..baf8a2412 --- /dev/null +++ b/core/lib/utils/web_renderer/canvas_kit.dart @@ -0,0 +1 @@ +export 'canvas_kit_stub.dart' if (dart.library.html) 'canvas_kit_web.dart'; \ No newline at end of file diff --git a/core/lib/utils/web_renderer/canvas_kit_stub.dart b/core/lib/utils/web_renderer/canvas_kit_stub.dart new file mode 100644 index 000000000..4cf14c7a4 --- /dev/null +++ b/core/lib/utils/web_renderer/canvas_kit_stub.dart @@ -0,0 +1,4 @@ +/// Whether the CanvasKit renderer is being used on web. +/// +/// Always returns `false` on non-web. +bool get isRendererCanvasKit => false; \ No newline at end of file diff --git a/core/lib/utils/web_renderer/canvas_kit_web.dart b/core/lib/utils/web_renderer/canvas_kit_web.dart new file mode 100644 index 000000000..94317ab2d --- /dev/null +++ b/core/lib/utils/web_renderer/canvas_kit_web.dart @@ -0,0 +1,6 @@ +import 'dart:js' as js; + +/// Whether the CanvasKit renderer is being used on web. +/// +/// Always returns `false` on non-web. +bool get isRendererCanvasKit => js.context['flutterCanvasKit'] != null; \ No newline at end of file diff --git a/lib/features/composer/presentation/widgets/attachment_item_composer_widget.dart b/lib/features/composer/presentation/widgets/attachment_item_composer_widget.dart index 42084ef58..c77b6e7a4 100644 --- a/lib/features/composer/presentation/widgets/attachment_item_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/attachment_item_composer_widget.dart @@ -1,5 +1,6 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/views/button/tmail_button_widget.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'; @@ -58,18 +59,25 @@ class AttachmentItemComposerWidget extends StatelessWidget with AppLoaderMixin { ), const SizedBox(width: AttachmentItemComposerWidgetStyle.space), Expanded( - child: ExtendedText( - fileState.fileName, - maxLines: 1, - overflowWidget: const TextOverflowWidget( - position: TextOverflowPosition.middle, - child: Text( - '...', - style: AttachmentItemComposerWidgetStyle.dotsLabelTextStyle, - ), - ), - style: AttachmentItemComposerWidgetStyle.labelTextStyle, - ), + child: PlatformInfo.isCanvasKit + ? ExtendedText( + fileState.fileName, + maxLines: 1, + overflowWidget: const TextOverflowWidget( + position: TextOverflowPosition.middle, + child: Text( + '...', + style: AttachmentItemComposerWidgetStyle.dotsLabelTextStyle, + ), + ), + style: AttachmentItemComposerWidgetStyle.labelTextStyle, + ) + : Text( + fileState.fileName, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: AttachmentItemComposerWidgetStyle.labelTextStyle, + ) ), const SizedBox(width: AttachmentItemComposerWidgetStyle.space), Text( diff --git a/lib/features/composer/presentation/widgets/recipient_tag_item_widget.dart b/lib/features/composer/presentation/widgets/recipient_tag_item_widget.dart index 53fb30f4c..2fea5a509 100644 --- a/lib/features/composer/presentation/widgets/recipient_tag_item_widget.dart +++ b/lib/features/composer/presentation/widgets/recipient_tag_item_widget.dart @@ -57,7 +57,7 @@ class RecipientTagItemWidget extends StatelessWidget { Flexible( child: Padding( padding: EdgeInsetsDirectional.only( - top: PlatformInfo.isWebMobile ? 0 : 8 + top: !PlatformInfo.isCanvasKit ? 0 : 8 ), child: InkWell( onTap: () => isCollapsed @@ -158,10 +158,10 @@ class RecipientTagItemWidget extends StatelessWidget { } EdgeInsetsGeometry? get _counterMargin { - if (PlatformInfo.isWebMobile) { - return RecipientTagItemWidgetStyle.webMobileCounterMargin; - } else if (PlatformInfo.isWeb) { - return RecipientTagItemWidgetStyle.webCounterMargin; + if (PlatformInfo.isWeb) { + return PlatformInfo.isCanvasKit + ? RecipientTagItemWidgetStyle.webCounterMargin + : RecipientTagItemWidgetStyle.webMobileCounterMargin; } else { return RecipientTagItemWidgetStyle.counterMargin; } diff --git a/lib/features/email/presentation/widgets/attachment_item_widget.dart b/lib/features/email/presentation/widgets/attachment_item_widget.dart index 43aa94b94..bcbe53849 100644 --- a/lib/features/email/presentation/widgets/attachment_item_widget.dart +++ b/lib/features/email/presentation/widgets/attachment_item_widget.dart @@ -53,18 +53,25 @@ class AttachmentItemWidget extends StatelessWidget { ), const SizedBox(width: AttachmentItemWidgetStyle.space), Expanded( - child: ExtendedText( - (attachment.name ?? ''), - maxLines: 1, - overflowWidget: const TextOverflowWidget( - position: TextOverflowPosition.middle, - child: Text( - "...", - style: AttachmentItemWidgetStyle.dotsLabelTextStyle, - ), - ), - style: AttachmentItemWidgetStyle.labelTextStyle, - ), + child: PlatformInfo.isCanvasKit + ? ExtendedText( + (attachment.name ?? ''), + maxLines: 1, + overflowWidget: const TextOverflowWidget( + position: TextOverflowPosition.middle, + child: Text( + "...", + style: AttachmentItemWidgetStyle.dotsLabelTextStyle, + ), + ), + style: AttachmentItemWidgetStyle.labelTextStyle, + ) + : Text( + (attachment.name ?? ''), + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: AttachmentItemWidgetStyle.labelTextStyle, + ) ), const SizedBox(width: AttachmentItemWidgetStyle.space), Text( diff --git a/lib/features/email/presentation/widgets/attachment_list/attachment_list_item_widget.dart b/lib/features/email/presentation/widgets/attachment_list/attachment_list_item_widget.dart index 4209043f7..f432a06ab 100644 --- a/lib/features/email/presentation/widgets/attachment_list/attachment_list_item_widget.dart +++ b/lib/features/email/presentation/widgets/attachment_list/attachment_list_item_widget.dart @@ -1,6 +1,7 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/style_utils.dart'; import 'package:core/presentation/views/button/tmail_button_widget.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'; @@ -46,18 +47,26 @@ class AttachmentListItemWidget extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ExtendedText( - (attachment.name ?? ''), - maxLines: 1, - overflowWidget: const TextOverflowWidget( - position: TextOverflowPosition.middle, - child: Text( - "...", - style: AttachmentListItemWidgetStyle.dotsLabelTextStyle, + if (PlatformInfo.isCanvasKit) + ExtendedText( + (attachment.name ?? ''), + maxLines: 1, + overflowWidget: const TextOverflowWidget( + position: TextOverflowPosition.middle, + child: Text( + "...", + style: AttachmentListItemWidgetStyle.dotsLabelTextStyle, + ), ), + style: AttachmentListItemWidgetStyle.labelTextStyle, + ) + else + Text( + (attachment.name ?? ''), + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: AttachmentListItemWidgetStyle.labelTextStyle, ), - style: AttachmentListItemWidgetStyle.labelTextStyle, - ), const SizedBox(height: AttachmentListItemWidgetStyle.fileTitleBottomSpace), Text( filesize(attachment.size?.value), diff --git a/lib/features/email/presentation/widgets/feedback_draggable_attachment_item_widget.dart b/lib/features/email/presentation/widgets/feedback_draggable_attachment_item_widget.dart index 08a04a43a..a91a32cf9 100644 --- a/lib/features/email/presentation/widgets/feedback_draggable_attachment_item_widget.dart +++ b/lib/features/email/presentation/widgets/feedback_draggable_attachment_item_widget.dart @@ -1,4 +1,5 @@ import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/utils/platform_info.dart'; import 'package:extended_text/extended_text.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -43,20 +44,27 @@ class FeedbackDraggableAttachmentItemWidget extends StatelessWidget { ), const SizedBox(width: FeedbackDraggableAttachmentItemWidgetStyle.space), Flexible( - child: DefaultTextStyle( - style: FeedbackDraggableAttachmentItemWidgetStyle.labelTextStyle, - child: ExtendedText( - attachment.name ?? '', - maxLines: 1, - overflowWidget: const TextOverflowWidget( - position: TextOverflowPosition.middle, - child: Text( - '...', - style: FeedbackDraggableAttachmentItemWidgetStyle.dotsLabelTextStyle, + child: PlatformInfo.isCanvasKit + ? DefaultTextStyle( + style: FeedbackDraggableAttachmentItemWidgetStyle.labelTextStyle, + child: ExtendedText( + attachment.name ?? '', + maxLines: 1, + overflowWidget: const TextOverflowWidget( + position: TextOverflowPosition.middle, + child: Text( + '...', + style: FeedbackDraggableAttachmentItemWidgetStyle.dotsLabelTextStyle, + ), + ), ), + ) + : Text( + attachment.name ?? '', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: FeedbackDraggableAttachmentItemWidgetStyle.labelTextStyle, ), - ), - ), ) ], ),