TF-2057 Add calendar event detail widget

(cherry picked from commit a695a3bc57213db07623022e494679563dbe1521)
This commit is contained in:
dab246
2023-07-27 18:41:33 +07:00
committed by Dat Vu
parent 03426ec638
commit 689324edaf
3 changed files with 92 additions and 0 deletions
@@ -29,6 +29,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/app_bar_mail_w
import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_file_tile_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/bottom_bar_mail_widget_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_action_banner_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_detail_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_information_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/information_sender_and_receiver_builder.dart';
@@ -302,6 +303,15 @@ class EmailView extends GetWidget<SingleEmailController> with AppLoaderMixin {
return const SizedBox.shrink();
}
}),
Obx(() {
if (controller.calendarEvent.value != null) {
return CalendarEventDetailWidget(
calendarEvent: controller.calendarEvent.value!
);
} else {
return const SizedBox.shrink();
}
}),
if (PlatformInfo.isWeb)
Expanded(child: Padding(
padding: const EdgeInsetsDirectional.only(start: 16, bottom: 16),
@@ -0,0 +1,9 @@
class CalendarEventDetailWidgetStyles {
static const double textSize = 24;
static const double borderRadius = 16;
static const double verticalMargin = 12;
static const double horizontalMargin = 16;
static const double contentPadding = 16;
static const double fieldTopPadding = 16;
}
@@ -0,0 +1,73 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:flutter/material.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart';
import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart';
import 'package:tmail_ui_user/features/email/presentation/styles/calendar_event_detail_widget_styles.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_attendee_detail_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_description_detail_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_location_detail_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_time_detail_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_title_widget.dart';
class CalendarEventDetailWidget extends StatelessWidget {
final CalendarEvent calendarEvent;
const CalendarEventDetailWidget({
super.key,
required this.calendarEvent
});
@override
Widget build(BuildContext context) {
return Container(
clipBehavior: Clip.antiAlias,
decoration: const ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
side: BorderSide(
width: 0.5,
color: AppColor.colorCalendarEventInformationStroke,
),
borderRadius: BorderRadius.all(Radius.circular(CalendarEventDetailWidgetStyles.borderRadius)),
),
),
margin: const EdgeInsetsDirectional.symmetric(
vertical: CalendarEventDetailWidgetStyles.verticalMargin,
horizontal: CalendarEventDetailWidgetStyles.horizontalMargin),
padding: const EdgeInsets.all(CalendarEventDetailWidgetStyles.contentPadding),
width: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (calendarEvent.title?.isNotEmpty == true)
EventTitleWidget(title: calendarEvent.title!),
if (calendarEvent.description?.isNotEmpty == true)
Padding(
padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding),
child: EventDescriptionDetailWidget(description: calendarEvent.description!)
),
if (calendarEvent.dateTimeEventAsString.isNotEmpty)
Padding(
padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding),
child: EventTimeWidgetWidget(timeEvent: calendarEvent.dateTimeEventAsString),
),
if (calendarEvent.location?.isNotEmpty == true)
Padding(
padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding),
child: EventLocationDetailWidget(locationEvent: calendarEvent.location!),
),
if (calendarEvent.participants?.isNotEmpty == true && calendarEvent.organizer != null)
Padding(
padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding),
child: EventAttendeeDetailWidget(
attendees: calendarEvent.participants!,
organizer: calendarEvent.organizer!,
),
),
],
),
);
}
}