From cc869df575d25b818ca0d4554fd20c475e482352 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 31 Aug 2019 00:13:47 +0900 Subject: [PATCH] fullscreen: print --- lib/widgets/fullscreen/image_page.dart | 20 ++++++++++- lib/widgets/fullscreen/overlay_top.dart | 4 +++ pubspec.lock | 44 ++++++++++++++++++++++++- pubspec.yaml | 2 ++ 4 files changed, 68 insertions(+), 2 deletions(-) diff --git a/lib/widgets/fullscreen/image_page.dart b/lib/widgets/fullscreen/image_page.dart index 374c9110c..4fd624e00 100644 --- a/lib/widgets/fullscreen/image_page.dart +++ b/lib/widgets/fullscreen/image_page.dart @@ -12,8 +12,10 @@ import 'package:flushbar/flushbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; +import 'package:pdf/widgets.dart' as pdf; import 'package:photo_view/photo_view.dart'; import 'package:photo_view/photo_view_gallery.dart'; +import 'package:printing/printing.dart'; import 'package:screen/screen.dart'; class FullscreenPage extends AnimatedWidget { @@ -236,6 +238,9 @@ class FullscreenBodyState extends State with SingleTickerProvide case FullscreenAction.openMap: AndroidAppService.openMap(entry.geoUri); break; + case FullscreenAction.print: + print(entry); + break; case FullscreenAction.rotateCCW: rotate(entry, clockwise: false); break; @@ -264,6 +269,19 @@ class FullscreenBodyState extends State with SingleTickerProvide )..show(context); } + print(ImageEntry entry) async { + final doc = pdf.Document(title: entry.title); + final image = await pdfImageFromImageProvider( + pdf: doc.document, + image: FileImage(File(entry.path)), + ); + doc.addPage(pdf.Page(build: (context) => pdf.Center(child: pdf.Image(image)))); // Page + Printing.layoutPdf( + onLayout: (format) => doc.save(), + name: entry.title, + ); + } + rotate(ImageEntry entry, {@required bool clockwise}) async { final success = await entry.rotate(clockwise: clockwise); showFeedback(success ? 'Done!' : 'Failed'); @@ -320,7 +338,7 @@ class FullscreenBodyState extends State with SingleTickerProvide } } -enum FullscreenAction { delete, edit, info, open, openMap, rename, rotateCCW, rotateCW, setAs, share } +enum FullscreenAction { delete, edit, info, open, openMap, print, rename, rotateCCW, rotateCW, setAs, share } class ImagePage extends StatefulWidget { final ImageCollection collection; diff --git a/lib/widgets/fullscreen/overlay_top.dart b/lib/widgets/fullscreen/overlay_top.dart index ee10960df..1f34d0501 100644 --- a/lib/widgets/fullscreen/overlay_top.dart +++ b/lib/widgets/fullscreen/overlay_top.dart @@ -71,6 +71,10 @@ class FullscreenTopOverlay extends StatelessWidget { value: FullscreenAction.rotateCW, child: MenuRow(text: 'Rotate right', icon: Icons.rotate_right), ), + PopupMenuItem( + value: FullscreenAction.print, + child: MenuRow(text: 'Print', icon: Icons.print), + ), PopupMenuDivider(), PopupMenuItem( value: FullscreenAction.edit, diff --git a/pubspec.lock b/pubspec.lock index 44a23ebf5..1393f2672 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -8,6 +8,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.7+2" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.10" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.2" async: dependency: transitive description: @@ -50,6 +64,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" flushbar: dependency: "direct main" description: @@ -144,6 +165,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.4" + pdf: + dependency: "direct main" + description: + name: pdf + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.18" pedantic: dependency: transitive description: @@ -172,6 +200,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.4.2" + printing: + dependency: "direct main" + description: + name: printing + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" quiver: dependency: transitive description: @@ -275,6 +310,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.6" + utf: + dependency: transitive + description: + name: utf + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.0+5" vector_math: dependency: transitive description: @@ -298,4 +340,4 @@ packages: version: "3.5.0" sdks: dart: ">=2.4.0 <3.0.0" - flutter: ">=1.5.9-pre.94 <2.0.0" + flutter: ">=1.7.0 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index ba7376fa4..2e0680899 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,8 +28,10 @@ dependencies: google_maps_flutter: intl: path: + pdf: permission_handler: photo_view: + printing: screen: shared_preferences: sqflite: