TF-2537 Fix app crash when user trying attach file to composer in web app

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2024-02-21 08:31:40 +07:00
committed by Dat H. Pham
parent 20fe348672
commit 7e96d09f52
9 changed files with 96 additions and 52 deletions
+2 -1
View File
@@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:core/utils/app_logger.dart'; import 'package:core/utils/app_logger.dart';
import 'package:core/utils/web_renderer/canvas_kit.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
abstract class PlatformInfo { abstract class PlatformInfo {
@@ -13,7 +14,7 @@ abstract class PlatformInfo {
static bool get isAndroid => !kIsWeb && Platform.isAndroid; static bool get isAndroid => !kIsWeb && Platform.isAndroid;
static bool get isMobile => isAndroid || isIOS; static bool get isMobile => isAndroid || isIOS;
static bool get isDesktop => isLinux || isWindows || isMacOS; 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 { static String get platformNameOS {
var platformName = ''; var platformName = '';
@@ -0,0 +1 @@
export 'canvas_kit_stub.dart' if (dart.library.html) 'canvas_kit_web.dart';
@@ -0,0 +1,4 @@
/// Whether the CanvasKit renderer is being used on web.
///
/// Always returns `false` on non-web.
bool get isRendererCanvasKit => false;
@@ -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;
@@ -1,5 +1,6 @@
import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/views/button/tmail_button_widget.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:extended_text/extended_text.dart';
import 'package:filesize/filesize.dart'; import 'package:filesize/filesize.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -58,7 +59,8 @@ class AttachmentItemComposerWidget extends StatelessWidget with AppLoaderMixin {
), ),
const SizedBox(width: AttachmentItemComposerWidgetStyle.space), const SizedBox(width: AttachmentItemComposerWidgetStyle.space),
Expanded( Expanded(
child: ExtendedText( child: PlatformInfo.isCanvasKit
? ExtendedText(
fileState.fileName, fileState.fileName,
maxLines: 1, maxLines: 1,
overflowWidget: const TextOverflowWidget( overflowWidget: const TextOverflowWidget(
@@ -69,7 +71,13 @@ class AttachmentItemComposerWidget extends StatelessWidget with AppLoaderMixin {
), ),
), ),
style: AttachmentItemComposerWidgetStyle.labelTextStyle, style: AttachmentItemComposerWidgetStyle.labelTextStyle,
), )
: Text(
fileState.fileName,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: AttachmentItemComposerWidgetStyle.labelTextStyle,
)
), ),
const SizedBox(width: AttachmentItemComposerWidgetStyle.space), const SizedBox(width: AttachmentItemComposerWidgetStyle.space),
Text( Text(
@@ -57,7 +57,7 @@ class RecipientTagItemWidget extends StatelessWidget {
Flexible( Flexible(
child: Padding( child: Padding(
padding: EdgeInsetsDirectional.only( padding: EdgeInsetsDirectional.only(
top: PlatformInfo.isWebMobile ? 0 : 8 top: !PlatformInfo.isCanvasKit ? 0 : 8
), ),
child: InkWell( child: InkWell(
onTap: () => isCollapsed onTap: () => isCollapsed
@@ -158,10 +158,10 @@ class RecipientTagItemWidget extends StatelessWidget {
} }
EdgeInsetsGeometry? get _counterMargin { EdgeInsetsGeometry? get _counterMargin {
if (PlatformInfo.isWebMobile) { if (PlatformInfo.isWeb) {
return RecipientTagItemWidgetStyle.webMobileCounterMargin; return PlatformInfo.isCanvasKit
} else if (PlatformInfo.isWeb) { ? RecipientTagItemWidgetStyle.webCounterMargin
return RecipientTagItemWidgetStyle.webCounterMargin; : RecipientTagItemWidgetStyle.webMobileCounterMargin;
} else { } else {
return RecipientTagItemWidgetStyle.counterMargin; return RecipientTagItemWidgetStyle.counterMargin;
} }
@@ -53,7 +53,8 @@ class AttachmentItemWidget extends StatelessWidget {
), ),
const SizedBox(width: AttachmentItemWidgetStyle.space), const SizedBox(width: AttachmentItemWidgetStyle.space),
Expanded( Expanded(
child: ExtendedText( child: PlatformInfo.isCanvasKit
? ExtendedText(
(attachment.name ?? ''), (attachment.name ?? ''),
maxLines: 1, maxLines: 1,
overflowWidget: const TextOverflowWidget( overflowWidget: const TextOverflowWidget(
@@ -64,7 +65,13 @@ class AttachmentItemWidget extends StatelessWidget {
), ),
), ),
style: AttachmentItemWidgetStyle.labelTextStyle, style: AttachmentItemWidgetStyle.labelTextStyle,
), )
: Text(
(attachment.name ?? ''),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: AttachmentItemWidgetStyle.labelTextStyle,
)
), ),
const SizedBox(width: AttachmentItemWidgetStyle.space), const SizedBox(width: AttachmentItemWidgetStyle.space),
Text( Text(
@@ -1,6 +1,7 @@
import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/style_utils.dart'; import 'package:core/presentation/utils/style_utils.dart';
import 'package:core/presentation/views/button/tmail_button_widget.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:extended_text/extended_text.dart';
import 'package:filesize/filesize.dart'; import 'package:filesize/filesize.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -46,6 +47,7 @@ class AttachmentListItemWidget extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (PlatformInfo.isCanvasKit)
ExtendedText( ExtendedText(
(attachment.name ?? ''), (attachment.name ?? ''),
maxLines: 1, maxLines: 1,
@@ -57,6 +59,13 @@ class AttachmentListItemWidget extends StatelessWidget {
), ),
), ),
style: AttachmentListItemWidgetStyle.labelTextStyle, style: AttachmentListItemWidgetStyle.labelTextStyle,
)
else
Text(
(attachment.name ?? ''),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: AttachmentListItemWidgetStyle.labelTextStyle,
), ),
const SizedBox(height: AttachmentListItemWidgetStyle.fileTitleBottomSpace), const SizedBox(height: AttachmentListItemWidgetStyle.fileTitleBottomSpace),
Text( Text(
@@ -1,4 +1,5 @@
import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/utils/platform_info.dart';
import 'package:extended_text/extended_text.dart'; import 'package:extended_text/extended_text.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
@@ -43,7 +44,8 @@ class FeedbackDraggableAttachmentItemWidget extends StatelessWidget {
), ),
const SizedBox(width: FeedbackDraggableAttachmentItemWidgetStyle.space), const SizedBox(width: FeedbackDraggableAttachmentItemWidgetStyle.space),
Flexible( Flexible(
child: DefaultTextStyle( child: PlatformInfo.isCanvasKit
? DefaultTextStyle(
style: FeedbackDraggableAttachmentItemWidgetStyle.labelTextStyle, style: FeedbackDraggableAttachmentItemWidgetStyle.labelTextStyle,
child: ExtendedText( child: ExtendedText(
attachment.name ?? '', attachment.name ?? '',
@@ -56,6 +58,12 @@ class FeedbackDraggableAttachmentItemWidget extends StatelessWidget {
), ),
), ),
), ),
)
: Text(
attachment.name ?? '',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: FeedbackDraggableAttachmentItemWidgetStyle.labelTextStyle,
), ),
) )
], ],