From b7f78f719cf60d2dde4d2f31f6fc3dd9f48c8a5f Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 22 May 2024 14:58:24 +0700 Subject: [PATCH] TF-2764 Hide printing button in browsers (Firefox/Safari/Edge) --- .../widgets/pdf_viewer/pdf_viewer.dart | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/lib/features/email/presentation/widgets/pdf_viewer/pdf_viewer.dart b/lib/features/email/presentation/widgets/pdf_viewer/pdf_viewer.dart index aec4502e0..4d5be3c86 100644 --- a/lib/features/email/presentation/widgets/pdf_viewer/pdf_viewer.dart +++ b/lib/features/email/presentation/widgets/pdf_viewer/pdf_viewer.dart @@ -7,8 +7,10 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:core/utils/app_logger.dart'; import 'package:dartz/dartz.dart' as dartz; +import 'package:device_info_plus/device_info_plus.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; +import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:model/download/download_task_id.dart'; import 'package:model/email/attachment.dart'; @@ -57,6 +59,8 @@ class _PDFViewerState extends State { final PdfViewerController _pdfViewerController = PdfViewerController(); final ValueNotifier _pdfViewStateNotifier = ValueNotifier(null); + final DeviceInfoPlugin _deviceInfoPlugin = Get.find(); + @override void initState() { super.initState(); @@ -99,6 +103,10 @@ class _PDFViewerState extends State { }); } + bool isBrowserSupportedPrinting(BrowserName? browserName) => !(browserName == BrowserName.edge + || browserName == BrowserName.firefox + || browserName == BrowserName.safari); + @override void dispose() { _pdfViewerController.dispose(); @@ -199,17 +207,24 @@ class _PDFViewerState extends State { valueListenable: _pdfViewStateNotifier, builder: (context, viewState, child) { if (viewState is DownloadAttachmentForWebSuccess) { - return TopBarPDFViewer( - attachment: widget.attachment, - downloadAction: () => widget.downloadAction?.call( - viewState.bytes, - widget.attachment.generateFileName() - ), - printAction: () => widget.printAction?.call( - viewState.bytes, - widget.attachment.generateFileName() - ), - ); + return FutureBuilder( + future: _deviceInfoPlugin.deviceInfo, + builder: (context, deviceInfo) { + BrowserName? browserName; + if (deviceInfo.hasData && deviceInfo.data is WebBrowserInfo) { + browserName = (deviceInfo.data as WebBrowserInfo).browserName; + } + return TopBarPDFViewer( + attachment: widget.attachment, + downloadAction: () => widget.downloadAction?.call( + viewState.bytes, + widget.attachment.generateFileName() + ), + printAction: isBrowserSupportedPrinting(browserName) ? + () => widget.printAction?.call(viewState.bytes, widget.attachment.generateFileName()) + : null, + ); + }); } return child ?? const SizedBox.shrink(); },