diff --git a/CHANGELOG.md b/CHANGELOG.md index ff8c83e0..32badbf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,18 @@ ## Newest Release +### 3.2.2 - 16 Mar 2022 + +- Improves the example project by using the `PlatformUtils` class to check for supported platforms (#33212) +- Adds a new **Save As** example to the example project. (#33376) +- Updates for PSPDFKit 11.3.0 for iOS. (#33514) + +## Previous Releases + ### 3.2.1 - 04 Mar 2022 - Updates for PSPDFKit 8.1.2 for Android. (#33314) - Updates for PSPDFKit 11.2.4 for iOS. (#33314) -## Previous Releases - ### 3.2.0 - 14 Feb 2022 - This release requires you to update your Android project's `compileSdkVersion` to version 31. Please refer to [our migration guide](https://pspdfkit.com/guides/flutter/migration-guides/flutter-3-2-0-migration-guide) for this release. diff --git a/example/ios/Podfile b/example/ios/Podfile index 95a08637..1a1238ec 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -29,7 +29,7 @@ flutter_ios_podfile_setup target 'Runner' do flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - pod 'PSPDFKit', '~> 11.2.4' + pod 'PSPDFKit', '~> 11.3.0' end post_install do |installer| diff --git a/example/lib/main.dart b/example/lib/main.dart index 4585e69a..ea8c0295 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -12,6 +12,7 @@ import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:pspdfkit_example/pspdfkit_save_as_example.dart'; import 'package:pspdfkit_flutter/src/main.dart'; import 'package:pspdfkit_flutter/src/widgets/pspdfkit_widget_controller.dart'; @@ -21,7 +22,9 @@ import 'pspdfkit_form_example.dart'; import 'pspdfkit_instantjson_example.dart'; import 'pspdfkit_annotations_example.dart'; import 'pspdfkit_manual_save_example.dart'; +import 'pspdfkit_save_as_example.dart'; import 'pspdfkit_annotation_processing_example.dart'; +import 'platform_utils.dart'; const String _documentPath = 'PDFs/PSPDFKit.pdf'; const String _lockedDocumentPath = 'PDFs/protected.pdf'; @@ -59,8 +62,11 @@ const String _annotationsExample = const String _annotationsExampleSub = 'Programmatically adds and removes annotations using a custom Widget.'; const String _manualSaveExample = 'Manual Save'; +const String _saveAsExample = 'Save As'; const String _manualSaveExampleSub = 'Add a save button at the bottom and disable automatic saving.'; +const String _saveAsExampleSub = + 'Embed and save the changes made to a document into a new file'; const String _annotationProcessingExample = 'Process Annotations'; const String _annotationProcessingExampleSub = 'Programmatically adds and removes annotations using a custom Widget.'; @@ -145,31 +151,18 @@ class _HomePageState extends State with WidgetsBindingObserver { return file; } - bool isCupertino(BuildContext context) { - final defaultTargetPlatform = Theme.of(context).platform; - switch (defaultTargetPlatform) { - case TargetPlatform.iOS: - case TargetPlatform.macOS: - return true; - case TargetPlatform.android: - case TargetPlatform.fuchsia: - case TargetPlatform.linux: - case TargetPlatform.windows: - return false; - } - } - void showDocument() async { final extractedDocument = await extractAsset(_documentPath); await Navigator.of(context).push(MaterialPageRoute( builder: (_) => Scaffold( - extendBodyBehindAppBar: isCupertino(context) ? false : true, + extendBodyBehindAppBar: + PlatformUtils.isCupertino(context) ? false : true, appBar: AppBar(), body: SafeArea( top: false, bottom: false, child: Container( - padding: isCupertino(context) + padding: PlatformUtils.isCupertino(context) ? null : const EdgeInsets.only(top: kToolbarHeight), child: PspdfkitWidget( @@ -179,7 +172,7 @@ class _HomePageState extends State with WidgetsBindingObserver { void showDocumentPlatformStyle() async { final extractedDocument = await extractAsset(_documentPath); - if (isCupertino(context)) { + if (PlatformUtils.isCupertino(context)) { await Navigator.of(context).push(CupertinoPageRoute( builder: (_) => CupertinoPageScaffold( navigationBar: const CupertinoNavigationBar(), @@ -206,13 +199,14 @@ class _HomePageState extends State with WidgetsBindingObserver { final extractedImage = await extractAsset(_imagePath); await Navigator.of(context).push(MaterialPageRoute( builder: (_) => Scaffold( - extendBodyBehindAppBar: isCupertino(context) ? false : true, + extendBodyBehindAppBar: + PlatformUtils.isCupertino(context) ? false : true, appBar: AppBar(), body: SafeArea( top: false, bottom: false, child: Container( - padding: isCupertino(context) + padding: PlatformUtils.isCupertino(context) ? null : const EdgeInsets.only(top: kToolbarHeight), child: @@ -223,13 +217,14 @@ class _HomePageState extends State with WidgetsBindingObserver { final extractedDocument = await extractAsset(_documentPath); await Navigator.of(context).push(MaterialPageRoute( builder: (_) => Scaffold( - extendBodyBehindAppBar: isCupertino(context) ? false : true, + extendBodyBehindAppBar: + PlatformUtils.isCupertino(context) ? false : true, appBar: AppBar(), body: SafeArea( top: false, bottom: false, child: Container( - padding: isCupertino(context) + padding: PlatformUtils.isCupertino(context) ? null : const EdgeInsets.only(top: kToolbarHeight), child: PspdfkitWidget( @@ -245,13 +240,14 @@ class _HomePageState extends State with WidgetsBindingObserver { final extractedDocument = await extractAsset(_documentPath); await Navigator.of(context).push(MaterialPageRoute( builder: (_) => Scaffold( - extendBodyBehindAppBar: isCupertino(context) ? false : true, + extendBodyBehindAppBar: + PlatformUtils.isCupertino(context) ? false : true, appBar: AppBar(), body: SafeArea( top: false, bottom: false, child: Container( - padding: isCupertino(context) + padding: PlatformUtils.isCupertino(context) ? null : const EdgeInsets.only(top: kToolbarHeight), child: PspdfkitWidget( @@ -312,13 +308,14 @@ class _HomePageState extends State with WidgetsBindingObserver { final extractedLockedDocument = await extractAsset(_lockedDocumentPath); await Navigator.of(context).push(MaterialPageRoute( builder: (_) => Scaffold( - extendBodyBehindAppBar: isCupertino(context) ? false : true, + extendBodyBehindAppBar: + PlatformUtils.isCupertino(context) ? false : true, appBar: AppBar(), body: SafeArea( top: false, bottom: false, child: Container( - padding: isCupertino(context) + padding: PlatformUtils.isCupertino(context) ? null : const EdgeInsets.only(top: kToolbarHeight), child: PspdfkitWidget( @@ -350,8 +347,8 @@ class _HomePageState extends State with WidgetsBindingObserver { } void manualSaveExample() async { - final extractedWritableDocument = - await extractAsset(_documentPath, shouldOverwrite: false, prefix: 'persist'); + final extractedWritableDocument = await extractAsset(_documentPath, + shouldOverwrite: false, prefix: 'persist'); // Automatic Saving of documents is enabled by default in certain scenarios [see for details: https://pspdfkit.com/guides/flutter/save-a-document/#auto-save] // In order to manually save documents, you might consider disabling automatic saving with disableAutosave: true in the config @@ -361,6 +358,18 @@ class _HomePageState extends State with WidgetsBindingObserver { configuration: const {disableAutosave: true}))); } + void saveAsExample() async { + final extractedWritableDocument = await extractAsset(_documentPath, + shouldOverwrite: false, prefix: 'persist'); + + // Automatic Saving of documents is enabled by default in certain scenarios [see for details: https://pspdfkit.com/guides/flutter/save-a-document/#auto-save] + // In order to manually save documents, you might consider disabling automatic saving with disableAutosave: true in the config + await Navigator.of(context).push(MaterialPageRoute( + builder: (_) => PspdfkitSaveAsExampleWidget( + documentPath: extractedWritableDocument.path, + configuration: const {disableAutosave: true}))); + } + void annotationProcessingExample() async { final extractedDocument = await extractAsset(_documentPath); await Navigator.of(context).push(MaterialPageRoute( @@ -374,7 +383,7 @@ class _HomePageState extends State with WidgetsBindingObserver { final extractedDocument = await extractAsset(_documentPath); final extractedFormDocument = await extractAsset(_formPath); - if (isCupertino(context)) { + if (PlatformUtils.isCupertino(context)) { await Navigator.of(context).push(CupertinoPageRoute( builder: (_) => CupertinoPageScaffold( navigationBar: CupertinoNavigationBar(), @@ -669,20 +678,25 @@ class _HomePageState extends State with WidgetsBindingObserver { title: const Text(_manualSaveExample), subtitle: const Text(_manualSaveExampleSub), onTap: () => manualSaveExample()), + if (PlatformUtils.isCupertino(context)) + ListTile( + title: const Text(_saveAsExample), + subtitle: const Text(_saveAsExampleSub), + onTap: () => saveAsExample()), // The annotation processing example is supported by iOS only for now. - if (isCupertino(context)) + if (PlatformUtils.isCupertino(context)) ListTile( title: const Text(_annotationProcessingExample), subtitle: const Text(_annotationProcessingExampleSub), onTap: () => annotationProcessingExample()), // The import Instant JSON example is supported by iOS only for now. - if (isCupertino(context)) + if (PlatformUtils.isCupertino(context)) ListTile( title: const Text(_importInstantJsonExample), subtitle: const Text(_importInstantJsonExampleSub), onTap: () => importInstantJsonExample()), // The push two PspdfWidgets simultaneously example is supported by iOS only for now. - if (isCupertino(context)) + if (PlatformUtils.isCupertino(context)) ListTile( title: const Text(_widgetExampleFullScreen), subtitle: const Text(_widgetExampleFullScreenSub), diff --git a/example/lib/platform_utils.dart b/example/lib/platform_utils.dart index b7174110..5973cf61 100644 --- a/example/lib/platform_utils.dart +++ b/example/lib/platform_utils.dart @@ -1,4 +1,5 @@ import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; class PlatformUtils { static bool isCurrentPlatformSupported() { @@ -13,4 +14,18 @@ class PlatformUtils { static bool isIOS() { return defaultTargetPlatform == TargetPlatform.iOS; } + + static bool isCupertino(BuildContext context) { + final defaultTargetPlatform = Theme.of(context).platform; + switch (defaultTargetPlatform) { + case TargetPlatform.iOS: + case TargetPlatform.macOS: + return true; + case TargetPlatform.android: + case TargetPlatform.fuchsia: + case TargetPlatform.linux: + case TargetPlatform.windows: + return false; + } + } } diff --git a/example/lib/pspdfkit_annotation_processing_example.dart b/example/lib/pspdfkit_annotation_processing_example.dart index d38b62d7..c63e4628 100644 --- a/example/lib/pspdfkit_annotation_processing_example.dart +++ b/example/lib/pspdfkit_annotation_processing_example.dart @@ -14,6 +14,7 @@ import 'package:flutter/services.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:pspdfkit_example/platform_utils.dart'; import 'package:pspdfkit_flutter/src/main.dart'; import 'package:pspdfkit_flutter/src/widgets/pspdfkit_widget_controller.dart'; @@ -64,7 +65,7 @@ class _PspdfkitAnnotationProcessingExampleWidgetState 'configuration': widget.configuration }; - if (defaultTargetPlatform == TargetPlatform.iOS) { + if (PlatformUtils.isIOS()) { return CupertinoPageScaffold( navigationBar: const CupertinoNavigationBar(), child: SafeArea( @@ -117,7 +118,7 @@ class _PspdfkitAnnotationProcessingExampleWidgetState child: Text('Print Annotations')) ])) ]))); - } else if (defaultTargetPlatform == TargetPlatform.android) { + } else if (PlatformUtils.isAndroid()) { // This example is only supported in iOS at the moment. // Support for Android is coming soon. return Text('Unsupported Widget'); diff --git a/example/lib/pspdfkit_annotations_example.dart b/example/lib/pspdfkit_annotations_example.dart index aa75e77c..24073dff 100644 --- a/example/lib/pspdfkit_annotations_example.dart +++ b/example/lib/pspdfkit_annotations_example.dart @@ -18,6 +18,8 @@ import 'package:flutter/material.dart'; import 'package:pspdfkit_flutter/src/widgets/pspdfkit_widget_controller.dart'; +import 'platform_utils.dart'; + const annotationJsonHashMap = { 'uuid': 'A92AA288-B11D-490C-847B-D1A0BC64D3E9', 'bbox': [ @@ -130,22 +132,20 @@ class _PspdfkitAnnotationsExampleWidgetState 'document': widget.documentPath, 'configuration': widget.configuration }; - if (defaultTargetPlatform == TargetPlatform.android || - defaultTargetPlatform == TargetPlatform.iOS) { + if (PlatformUtils.isCurrentPlatformSupported()) { return Scaffold( - extendBodyBehindAppBar: - defaultTargetPlatform == TargetPlatform.android, + extendBodyBehindAppBar: PlatformUtils.isAndroid(), appBar: AppBar(), body: SafeArea( top: false, bottom: false, child: Container( - padding: defaultTargetPlatform == TargetPlatform.iOS + padding: PlatformUtils.isIOS() ? null : const EdgeInsets.only(top: kToolbarHeight), child: Column(children: [ Expanded( - child: defaultTargetPlatform == TargetPlatform.android + child: PlatformUtils.isAndroid() ? PlatformViewLink( viewType: viewType, surfaceFactory: (BuildContext context, @@ -197,7 +197,7 @@ class _PspdfkitAnnotationsExampleWidgetState // E.g: `await view.addAnnotation(annotationJsonString);` }, child: const Text('Add Annotation')), - if (defaultTargetPlatform == TargetPlatform.iOS) + if (PlatformUtils.isIOS()) ElevatedButton( onPressed: () async { dynamic annotationsJson = diff --git a/example/lib/pspdfkit_form_example.dart b/example/lib/pspdfkit_form_example.dart index 58eeff0a..5bf49991 100644 --- a/example/lib/pspdfkit_form_example.dart +++ b/example/lib/pspdfkit_form_example.dart @@ -15,6 +15,7 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:pspdfkit_example/platform_utils.dart'; import 'package:pspdfkit_flutter/src/widgets/pspdfkit_widget_controller.dart'; @@ -53,25 +54,23 @@ class _PspdfkitFormExampleWidgetState extends State { 'document': widget.documentPath, 'configuration': widget.configuration }; - if (defaultTargetPlatform == TargetPlatform.android || - defaultTargetPlatform == TargetPlatform.iOS) { + if (PlatformUtils.isCurrentPlatformSupported()) { return Scaffold( - extendBodyBehindAppBar: - defaultTargetPlatform == TargetPlatform.android, + extendBodyBehindAppBar: PlatformUtils.isAndroid(), // Do not resize the the document view on Android or // it won't be rendered correctly when filling forms. - resizeToAvoidBottomInset: defaultTargetPlatform == TargetPlatform.iOS, + resizeToAvoidBottomInset: PlatformUtils.isIOS(), appBar: AppBar(), body: SafeArea( top: false, bottom: false, child: Container( - padding: defaultTargetPlatform == TargetPlatform.iOS + padding: PlatformUtils.isIOS() ? null : const EdgeInsets.only(top: kToolbarHeight), child: Column(children: [ Expanded( - child: defaultTargetPlatform == TargetPlatform.android + child: PlatformUtils.isAndroid() ? PlatformViewLink( viewType: viewType, surfaceFactory: (BuildContext context, @@ -117,8 +116,7 @@ class _PspdfkitFormExampleWidgetState extends State { // On Android do not show the buttons when the Keyboard // is visible. PSPDFKit for Android automatically // fills the space available and re-render the document view. - if (!_keyboardVisible || - defaultTargetPlatform == TargetPlatform.iOS) + if (!_keyboardVisible || PlatformUtils.isIOS()) SizedBox( child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, diff --git a/example/lib/pspdfkit_instantjson_example.dart b/example/lib/pspdfkit_instantjson_example.dart index dac9d9b0..f6100ea7 100644 --- a/example/lib/pspdfkit_instantjson_example.dart +++ b/example/lib/pspdfkit_instantjson_example.dart @@ -16,6 +16,8 @@ import 'package:flutter/material.dart'; import 'package:pspdfkit_flutter/src/widgets/pspdfkit_widget_controller.dart'; +import 'platform_utils.dart'; + class PspdfkitInstantJsonExampleWidget extends StatefulWidget { final String documentPath; final String instantJsonPath; @@ -47,7 +49,7 @@ class _PspdfkitInstantJsonExampleWidgetState 'configuration': widget.configuration, }; - if (defaultTargetPlatform == TargetPlatform.iOS) { + if (PlatformUtils.isIOS()) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar(), child: SafeArea( @@ -94,7 +96,7 @@ class _PspdfkitInstantJsonExampleWidgetState child: Text('Export Instant JSON')) ])) ]))); - } else if (defaultTargetPlatform == TargetPlatform.android) { + } else if (PlatformUtils.isAndroid()) { // This example is only supported in iOS at the moment. // Support for Android is coming soon. return Text('Unsupported Widget'); diff --git a/example/lib/pspdfkit_manual_save_example.dart b/example/lib/pspdfkit_manual_save_example.dart index 2b945496..49ab65e7 100644 --- a/example/lib/pspdfkit_manual_save_example.dart +++ b/example/lib/pspdfkit_manual_save_example.dart @@ -48,14 +48,13 @@ class _PspdfkitManualSaveExampleWidgetState }; if (PlatformUtils.isCurrentPlatformSupported()) { return Scaffold( - extendBodyBehindAppBar: - defaultTargetPlatform == TargetPlatform.android, + extendBodyBehindAppBar: PlatformUtils.isAndroid(), appBar: AppBar(), body: SafeArea( top: false, bottom: false, child: Container( - padding: defaultTargetPlatform == TargetPlatform.iOS + padding: PlatformUtils.isIOS() ? null : const EdgeInsets.only(top: kToolbarHeight), child: Column(children: [ diff --git a/example/lib/pspdfkit_save_as_example.dart b/example/lib/pspdfkit_save_as_example.dart new file mode 100644 index 00000000..15402bf9 --- /dev/null +++ b/example/lib/pspdfkit_save_as_example.dart @@ -0,0 +1,146 @@ +/// +/// Copyright © 2022 PSPDFKit GmbH. All rights reserved. +/// +/// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW +/// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE PSPDFKIT LICENSE AGREEMENT. +/// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES. +/// This notice may not be removed from this file. +/// + +import 'dart:async'; + +import 'package:flutter/services.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter/material.dart'; + +import 'package:pspdfkit_flutter/src/main.dart'; +import 'package:pspdfkit_flutter/src/widgets/pspdfkit_widget_controller.dart'; +import 'platform_utils.dart'; + +class PspdfkitSaveAsExampleWidget extends StatefulWidget { + final String documentPath; + final dynamic configuration; + + const PspdfkitSaveAsExampleWidget( + {Key? key, required this.documentPath, this.configuration}) + : super(key: key); + + @override + _PspdfkitSaveAsExampleWidgetState createState() => + _PspdfkitSaveAsExampleWidgetState(); +} + +class _PspdfkitSaveAsExampleWidgetState + extends State { + late PspdfkitWidgetController pspdfkitWidgetController; + + Future getExportPath(String assetPath) async { + final tempDir = await Pspdfkit.getTemporaryDirectory(); + final tempDocumentPath = '${tempDir.path}/$assetPath'; + return tempDocumentPath; + } + + @override + Widget build(BuildContext context) { + // This is used in the platform side to register the view. + const String viewType = 'com.pspdfkit.widget'; + // Pass parameters to the platform side. + final Map creationParams = { + 'document': widget.documentPath, + 'configuration': widget.configuration + }; + if (PlatformUtils.isCurrentPlatformSupported()) { + return Scaffold( + extendBodyBehindAppBar: PlatformUtils.isAndroid(), + appBar: AppBar(), + body: SafeArea( + top: false, + bottom: false, + child: Container( + padding: PlatformUtils.isIOS() + ? null + : const EdgeInsets.only(top: kToolbarHeight), + child: Column(children: [ + Expanded( + child: PlatformUtils.isAndroid() + ? PlatformViewLink( + viewType: viewType, + surfaceFactory: (BuildContext context, + PlatformViewController controller) { + return AndroidViewSurface( + controller: + controller as AndroidViewController, + gestureRecognizers: const < + Factory< + OneSequenceGestureRecognizer>>{}, + hitTestBehavior: + PlatformViewHitTestBehavior.opaque, + ); + }, + onCreatePlatformView: + (PlatformViewCreationParams params) { + return PlatformViewsService + .initSurfaceAndroidView( + id: params.id, + viewType: viewType, + layoutDirection: TextDirection.ltr, + creationParams: creationParams, + creationParamsCodec: + const StandardMessageCodec(), + onFocus: () { + params.onFocusChanged(true); + }, + ) + ..addOnPlatformViewCreatedListener( + params.onPlatformViewCreated) + ..addOnPlatformViewCreatedListener( + onPlatformViewCreated) + ..create(); + }) + : UiKitView( + viewType: viewType, + layoutDirection: TextDirection.ltr, + creationParams: creationParams, + onPlatformViewCreated: onPlatformViewCreated, + creationParamsCodec: + const StandardMessageCodec())), + SizedBox( + child: Column(children: [ + ElevatedButton( + onPressed: () async { + // Ensure that the path for the new document is a writable path + // You can use a package like https://pub.dev/packages/filesystem_picker to allow users select the directory and name of the file to save + final newDocumentPath = await getExportPath( + 'PDFs/Embedded/new_pdf_document.pdf'); + await pspdfkitWidgetController.processAnnotations( + 'all', 'embed', newDocumentPath); + await showDialog( + context: context, + builder: (BuildContext context) => AlertDialog( + title: const Text('Document Saved!'), + content: Text('Document Saved Successfully at ' + newDocumentPath), + actions: [ + TextButton( + onPressed: () => + Navigator.pop(context, 'OK'), + child: const Text('OK'), + ), + ], + ), + ); + }, + child: const Text('Save Document As')) + ])) + ])))); + } else { + return Text( + '$defaultTargetPlatform is not yet supported by PSPDFKit for Flutter.'); + } + } + + Future onPlatformViewCreated(int id) async { + pspdfkitWidgetController = PspdfkitWidgetController(id); + } +} diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 047912e4..e252467d 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -1,6 +1,6 @@ name: pspdfkit_example description: Demonstrates how to use the pspdfkit plugin. -version: 3.2.1 +version: 3.2.2 homepage: https://pspdfkit.com/ environment: sdk: '>=2.12.0 <3.0.0' diff --git a/ios/pspdfkit_flutter.podspec b/ios/pspdfkit_flutter.podspec index 7f3b2573..8f6d06ca 100644 --- a/ios/pspdfkit_flutter.podspec +++ b/ios/pspdfkit_flutter.podspec @@ -3,7 +3,7 @@ # Pod::Spec.new do |s| s.name = 'pspdfkit_flutter' - s.version = '3.2.1' + s.version = '3.2.2' s.homepage = 'https://PSPDFKit.com' s.documentation_url = 'https://pspdfkit.com/guides/flutter' s.license = { :type => 'Commercial', :file => '../LICENSE' } diff --git a/pubspec.yaml b/pubspec.yaml index bf2e85d1..670b9079 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: pspdfkit_flutter description: A Flutter plugin providing a feature-rich PDF viewing and editing experience to your users with the powerful PSPDFKit PDF SDK. -version: 3.2.1 +version: 3.2.2 homepage: https://pspdfkit.com/ repository: https://github.com/PSPDFKit/pspdfkit-flutter issue_tracker: https://support.pspdfkit.com/hc/en-us/requests/new