diff --git a/android/app/build.gradle b/android/app/build.gradle index 775910c2c..d84d5d96b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -53,7 +53,7 @@ android { defaultConfig { applicationId "deckers.thibault.aves" - // TODO TLAD try minSdkVersion 23 when kotlin migration is done + // TODO TLAD try minSdkVersion 23 minSdkVersion 24 targetSdkVersion 30 // same as compileSdkVersion versionCode flutterVersionCode.toInteger() @@ -99,7 +99,7 @@ repositories { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' implementation 'androidx.core:core-ktx:1.5.0-alpha05' // v1.5.0-alpha02+ for ShortcutManagerCompat.setDynamicShortcuts - implementation 'androidx.exifinterface:exifinterface:1.3.1' + implementation 'androidx.exifinterface:exifinterface:1.3.2' implementation 'com.commonsware.cwac:document:0.4.1' implementation 'com.drewnoakes:metadata-extractor:2.15.0' // as of v0.9.8.7, `Android-TiffBitmapFactory` master branch is set up to release and distribute via Bintray diff --git a/android/build.gradle b/android/build.gradle index 11444be0a..65df263a7 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,6 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.4.20' + ext.kotlin_version = '1.4.21' repositories { google() jcenter() diff --git a/lib/widgets/fullscreen/entry_action_delegate.dart b/lib/widgets/fullscreen/entry_action_delegate.dart index 0ee1078ed..b6102bf1d 100644 --- a/lib/widgets/fullscreen/entry_action_delegate.dart +++ b/lib/widgets/fullscreen/entry_action_delegate.dart @@ -15,8 +15,6 @@ import 'package:aves/widgets/fullscreen/source_viewer_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pdf; import 'package:pedantic/pedantic.dart'; import 'package:printing/printing.dart'; @@ -100,34 +98,32 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin { final documentName = entry.bestTitle ?? 'Aves'; final doc = pdf.Document(title: documentName); - PdfImage pdfImage; + pdf.Widget pdfChild; if (entry.isSvg) { final bytes = await ImageFileService.getImage(uri, mimeType, entry.rotationDegrees, entry.isFlipped); if (bytes != null && bytes.isNotEmpty) { - final svgRoot = await svg.fromSvgBytes(bytes, uri); - final viewBox = svgRoot.viewport.viewBox; - // 1000 is arbitrary, but large enough to look ok in the print preview - final targetSize = viewBox * 1000 / viewBox.longestSide; - final picture = svgRoot.toPicture(size: targetSize); - final uiImage = await picture.toImage(targetSize.width.ceil(), targetSize.height.ceil()); - pdfImage = await pdfImageFromImage( - pdf: doc.document, - image: uiImage, - ); + pdfChild = pdf.SvgImage(svg: utf8.decode(bytes)); } } else { - pdfImage = await pdfImageFromImageProvider( - pdf: doc.document, - image: UriImage( + pdfChild = pdf.Image.provider(await flutterImageProvider( + UriImage( uri: uri, mimeType: mimeType, rotationDegrees: rotationDegrees, isFlipped: isFlipped, ), - ); + )); } - if (pdfImage != null) { - doc.addPage(pdf.Page(build: (context) => pdf.Center(child: pdf.Image(pdfImage)))); // Page + if (pdfChild != null) { + doc.addPage(pdf.Page( + orientation: entry.isPortrait ? pdf.PageOrientation.portrait : pdf.PageOrientation.landscape, + build: (context) => pdf.FullPage( + ignoreMargins: true, + child: pdf.Center( + child: pdfChild, + ), + ), + )); // Page unawaited(Printing.layoutPdf( onLayout: (format) => doc.save(), name: documentName, diff --git a/pubspec.lock b/pubspec.lock index ce31a005d..b3090e230 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -63,7 +63,7 @@ packages: name: cached_network_image url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.5.0" characters: dependency: transitive description: @@ -282,7 +282,7 @@ packages: name: flutter_cache_manager url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" flutter_cube: dependency: transitive description: @@ -605,7 +605,7 @@ packages: name: panorama url: "https://pub.dartlang.org" source: hosted - version: "0.1.0" + version: "0.1.2" path: dependency: transitive description: @@ -668,7 +668,7 @@ packages: name: pdf url: "https://pub.dartlang.org" source: hosted - version: "1.12.0" + version: "1.13.0" pedantic: dependency: "direct main" description: @@ -682,7 +682,7 @@ packages: name: percent_indicator url: "https://pub.dartlang.org" source: hosted - version: "2.1.8" + version: "2.1.9" permission_handler: dependency: "direct main" description: @@ -738,7 +738,7 @@ packages: name: printing url: "https://pub.dartlang.org" source: hosted - version: "3.7.1" + version: "3.7.2" process: dependency: transitive description: @@ -787,7 +787,7 @@ packages: name: rxdart url: "https://pub.dartlang.org" source: hosted - version: "0.24.1" + version: "0.25.0" screen: dependency: "direct main" description: @@ -857,7 +857,7 @@ packages: name: shelf_static url: "https://pub.dartlang.org" source: hosted - version: "0.2.8" + version: "0.2.9+1" shelf_web_socket: dependency: transitive description: @@ -1052,13 +1052,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.1+3" - utf: - dependency: transitive - description: - name: utf - url: "https://pub.dartlang.org" - source: hosted - version: "0.9.0+5" uuid: dependency: transitive description: