TF-2182 Enable hyperlink for event description

(cherry picked from commit 5b44a0060b7f7509d940e8a4fb4e1c66f365a8ea)
This commit is contained in:
dab246
2023-10-05 11:00:31 +07:00
committed by Dat H. Pham
parent 60ecf09301
commit 04548cb1e9
2 changed files with 33 additions and 5 deletions
@@ -54,7 +54,11 @@ class CalendarEventDetailWidget extends StatelessWidget {
if (calendarEvent.description?.isNotEmpty == true) if (calendarEvent.description?.isNotEmpty == true)
Padding( Padding(
padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding), padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding),
child: EventDescriptionDetailWidget(description: calendarEvent.description!) child: EventDescriptionDetailWidget(
description: calendarEvent.description!,
onOpenComposerAction: onOpenComposerAction,
onOpenNewTabAction: onOpenNewTabAction,
)
), ),
if (calendarEvent.dateTimeEventAsString.isNotEmpty) if (calendarEvent.dateTimeEventAsString.isNotEmpty)
Padding( Padding(
@@ -1,18 +1,25 @@
import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:tmail_ui_user/features/email/presentation/styles/event_description_detail_widget_styles.dart'; import 'package:tmail_ui_user/features/email/presentation/styles/event_description_detail_widget_styles.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_location_detail_widget.dart';
class EventDescriptionDetailWidget extends StatelessWidget { class EventDescriptionDetailWidget extends StatelessWidget {
final String description; final String description;
final OnOpenNewTabAction? onOpenNewTabAction;
final OnOpenComposerAction? onOpenComposerAction;
const EventDescriptionDetailWidget({ const EventDescriptionDetailWidget({
super.key, super.key,
required this.description required this.description,
this.onOpenNewTabAction,
this.onOpenComposerAction,
}); });
@override @override
@@ -28,13 +35,30 @@ class EventDescriptionDetailWidget extends StatelessWidget {
padding: const EdgeInsetsDirectional.all(EventDescriptionDetailWidgetStyles.contentPadding), padding: const EdgeInsetsDirectional.all(EventDescriptionDetailWidgetStyles.contentPadding),
child: Stack( child: Stack(
children: [ children: [
Text( Linkify(
description, onOpen: (element) {
log('EventDescriptionDetailWidget::build:element: $element');
if (element is UrlElement) {
onOpenNewTabAction?.call(element.url);
} else if (element is EmailElement) {
onOpenComposerAction?.call(element.emailAddress);
}
},
text: description,
linkifiers: const [
EmailLinkifier(),
UrlLinkifier()
],
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontSize: EventDescriptionDetailWidgetStyles.textSize, fontSize: EventDescriptionDetailWidgetStyles.textSize,
color: EventDescriptionDetailWidgetStyles.valueColor color: EventDescriptionDetailWidgetStyles.valueColor
) ),
options: const LinkifyOptions(
removeWww: true,
looseUrl: true,
defaultToHttps: true
),
), ),
PositionedDirectional( PositionedDirectional(
top: 0, top: 0,