Files
workavia-mail-front/lib/features/email/presentation/widgets/html_attachment_previewer.dart
T
2025-02-05 03:00:08 -08:00

99 lines
3.4 KiB
Dart

import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart';
import 'package:core/presentation/views/responsive/responsive_widget.dart';
import 'package:flutter/material.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/pdf_viewer/top_bar_attachment_viewer.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
class HtmlAttachmentPreviewer extends StatelessWidget {
const HtmlAttachmentPreviewer({
super.key,
required this.htmlContent,
required this.title,
required this.mailToClicked,
required this.downloadAttachmentClicked,
required this.responsiveUtils,
});
final String title;
final String htmlContent;
final OnMailtoClicked mailToClicked;
final VoidCallback downloadAttachmentClicked;
final ResponsiveUtils responsiveUtils;
static const double _verticalMargin = 16;
@override
Widget build(BuildContext context) {
return Column(
children: [
TopBarAttachmentViewer(
title: title,
closeAction: popBack,
downloadAction: downloadAttachmentClicked,
),
Expanded(
child: LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
child: GestureDetector(
onTap: popBack,
child: PointerInterceptor(
child: ColoredBox(
color: Colors.transparent,
child: Center(
child: Container(
margin: const EdgeInsets.symmetric(vertical: _verticalMargin),
color: Colors.white,
child: ResponsiveWidget(
responsiveUtils: responsiveUtils,
desktop: _buildHtmlViewerWith(
context,
width: constraints.maxWidth * 0.4,
height: constraints.maxHeight - _verticalMargin * 2
),
tablet: _buildHtmlViewerWith(
context,
width: constraints.maxWidth * 0.8,
height: constraints.maxHeight - _verticalMargin * 2
),
mobile: _buildHtmlViewerWith(
context,
width: constraints.maxWidth,
height: constraints.maxHeight - _verticalMargin * 2
),
),
),
),
),
),
),
);
}
),
),
],
);
}
HtmlContentViewerOnWeb _buildHtmlViewerWith(
BuildContext context, {
required double width,
required double height,
}) {
return HtmlContentViewerOnWeb(
contentHtml: htmlContent,
widthContent: width,
heightContent: height,
direction: AppUtils.getCurrentDirection(context),
mailtoDelegate: (uri) {
popBack();
mailToClicked(uri);
},
keepWidthWhileLoading: true,
);
}
}