diff --git a/CHANGELOG.md b/CHANGELOG.md
index edd90809..541a67f8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
## Newest Release
+### 3.8.1 - 14 Feb 2024
+- Fixes callbacks when Pspdfkit.present() is used. (J#HYB-204)
+
+## Previous Releases
+
### 3.8.0 - 06 Feb 2024
- Adds Flutter for Web support. (#42151)
- Replaces configuration `Map` with a dedicated `PdfConfiguration` class. (#42191)
@@ -9,8 +14,6 @@
- Updates for PSPDFKit 13.3.0 for iOS. (#43305)
- Compile SDK version 34 is now required on Android. (#43305)
-## Previous Releases
-
### 3.7.2 - 12 Jan 2024
- Adds `flutterPdfFragmentAdded` callback for Android. (#42631)
@@ -20,9 +23,6 @@
- Fixes issue where iOS Appstore upload fails due to PSPDFKit Flutter missing "CFBundleShortVersionString" key. (#42166)
- Fixes issue where Plugin returned "Document is missing or invalid" during pdfViewControllerWillDismiss events. (#42255)
-- Upgrades compileSDKVersion to 34. (#42293)
-- Upgrades Android Gradle Plugin to 8.1.2. (#42293)
-- Upgrades to Java 17 for Android. (#42293)
### 3.7.0 - 07 Sep 2023
diff --git a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterInstantPdfActivity.kt b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterInstantPdfActivity.kt
index efba9559..d91f9493 100644
--- a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterInstantPdfActivity.kt
+++ b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterInstantPdfActivity.kt
@@ -39,6 +39,7 @@ class FlutterInstantPdfActivity : InstantPdfActivity() {
override fun onDocumentLoaded(pdfDocument: PdfDocument) {
super.onDocumentLoaded(pdfDocument)
+ EventDispatcher.getInstance().notifyDocumentLoaded(pdfDocument)
val result = loadedDocumentResult.getAndSet(null)
result?.success(true)
}
diff --git a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfActivity.java b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfActivity.java
index 7f30b950..59400a1f 100644
--- a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfActivity.java
+++ b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfActivity.java
@@ -60,6 +60,7 @@ protected void onDestroy() {
@Override
public void onDocumentLoaded(@NonNull PdfDocument pdfDocument) {
super.onDocumentLoaded(pdfDocument);
+ EventDispatcher.getInstance().notifyDocumentLoaded(pdfDocument);
Result result = loadedDocumentResult.getAndSet(null);
if (result != null) {
result.success(true);
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
index 89396657..2e8d31a5 100644
--- a/example/android/app/build.gradle
+++ b/example/android/app/build.gradle
@@ -50,7 +50,7 @@ dependencies {
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test:runner:1.5.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
- implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0'
constraints {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist
index 9b41e7d8..b3aaa733 100644
--- a/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/example/ios/Flutter/AppFrameworkInfo.plist
@@ -25,6 +25,6 @@
arm64
MinimumOSVersion
- 11.0
+ 12.0
diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj
index 58ded41e..057e9bb9 100644
--- a/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/example/ios/Runner.xcodeproj/project.pbxproj
@@ -148,7 +148,7 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
2CAD281880438BCF3C693E84 /* [CP] Embed Pods Frameworks */,
- 63CCEC3AD4F9B18F3F6B2519 /* [CP] Copy Pods Resources */,
+ 7F2264DF4C89C2FFD706F8AE /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -244,7 +244,7 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
- 63CCEC3AD4F9B18F3F6B2519 /* [CP] Copy Pods Resources */ = {
+ 7F2264DF4C89C2FFD706F8AE /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
diff --git a/example/pubspec.yaml b/example/pubspec.yaml
index a720b830..49bbdd92 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.8.0
+version: 3.8.1
homepage: https://pspdfkit.com/
environment:
sdk: '>=2.17.0 <4.0.0'
diff --git a/ios/pspdfkit_flutter.podspec b/ios/pspdfkit_flutter.podspec
index 13a862c2..ba26fe4c 100644
--- a/ios/pspdfkit_flutter.podspec
+++ b/ios/pspdfkit_flutter.podspec
@@ -5,7 +5,7 @@
#
Pod::Spec.new do |s|
s.name = "pspdfkit_flutter"
- s.version = "3.8.0"
+ s.version = "3.8.1"
s.homepage = "https://PSPDFKit.com"
s.documentation_url = "https://pspdfkit.com/guides/flutter"
s.license = { type: "Commercial", file: "../LICENSE" }
@@ -22,6 +22,6 @@ Pod::Spec.new do |s|
s.dependency("Instant", "13.3.0")
s.swift_version = "5.0"
s.platform = :ios, "15.0"
- s.version = "3.8.0"
+ s.version = "3.8.1"
s.pod_target_xcconfig = { "DEFINES_MODULE" => "YES", "SWIFT_INSTALL_OBJC_HEADER" => "NO" }
end
diff --git a/lib/pspdfkit.dart b/lib/pspdfkit.dart
index df863989..655102a0 100644
--- a/lib/pspdfkit.dart
+++ b/lib/pspdfkit.dart
@@ -222,117 +222,74 @@ class Pspdfkit {
static Future getTemporaryDirectory() =>
PspdfkitFlutterPlatform.instance.getTemporaryDirectory();
- /// onPause callback for FlutterPdfActivity
- static void Function()? flutterPdfActivityOnPause;
+ /// onPause callback for FlutterPdfActivity. Only available on Android.
+ static set flutterPdfActivityOnPause(
+ VoidCallback? flutterPdfActivityOnPause) {
+ PspdfkitFlutterPlatform.instance.flutterPdfActivityOnPause =
+ flutterPdfActivityOnPause;
+ }
- /// Added callback for FlutterPdfFragment
- static void Function()? flutterPdfFragmentAdded;
+ /// called when a PdfFragment is added. Only available on Android.
+ static set flutterPdfFragmentAdded(VoidCallback? flutterPdfFragmentAdded) {
+ PspdfkitFlutterPlatform.instance.flutterPdfFragmentAdded =
+ flutterPdfFragmentAdded;
+ }
- /// ViewControllerWillDismiss callback for PDFViewController
- static void Function()? pdfViewControllerWillDismiss;
+ /// Called when a document is loaded.
+ static set pspdfkitDocumentLoaded(
+ PspdfkitDocumentLoadedCallback? pspdfkitDocumentLoaded) {
+ PspdfkitFlutterPlatform.instance.flutterPdfDocumentLoaded =
+ pspdfkitDocumentLoaded;
+ }
- /// ViewControllerDidDismiss callback for PDFViewController
- static void Function()? pdfViewControllerDidDismiss;
+ /// ViewControllerWillDismiss callback for PDFViewController. Only available on iOS.
+ static set pdfViewControllerWillDismiss(
+ VoidCallback? pdfViewControllerWillDismiss) {
+ PspdfkitFlutterPlatform.instance.pdfViewControllerWillDismiss =
+ pdfViewControllerWillDismiss;
+ }
+
+ /// ViewControllerDidDismiss callback for PDFViewController. Only available on iOS.
+ static set pdfViewControllerDidDismiss(VoidCallback? callback) {
+ PspdfkitFlutterPlatform.instance.pdfViewControllerDidDismiss = callback;
+ }
/// Called when instant synchronization starts.
- static void Function(String? documentId)? instantSyncStarted;
+ static set instantSyncStarted(InstantSyncStartedCallback? callback) {
+ PspdfkitFlutterPlatform.instance.instantSyncStarted = callback;
+ }
/// Called when instant synchronization ends.
- static void Function(String? documentId)? instantSyncFinished;
+ static set instantSyncFinished(InstantSyncFinishedCallback? callback) {
+ PspdfkitFlutterPlatform.instance.instantSyncFinished = callback;
+ }
/// Called when instant synchronization fails.
- static void Function(String? documentId, String? error)? instantSyncFailed;
+ static set instantSyncFailed(InstantSyncFailedCallback? callback) {
+ PspdfkitFlutterPlatform.instance.instantSyncFailed = callback;
+ }
/// Called when instant authentication is done.
- static void Function(String documentId, String? validJWT)?
- instantAuthenticationFinished;
+ static set instantAuthenticationFinished(
+ InstantAuthenticationFinishedCallback? callback) {
+ PspdfkitFlutterPlatform.instance.instantAuthenticationFinished = callback;
+ }
/// Called when instant authentication fails.
- static void Function(String? documentId, String? error)?
- instantAuthenticationFailed;
-
- /// Only available on iOS.
- /// Called when instant document download is done.
- static void Function(String? documentId)? instantDownloadFinished;
-
- /// Only available on iOS.
- /// Called when instant document download fails.
- static void Function(String? documentId, String? error)?
- instantDownloadFailed;
-
- /// Called with the document has been loaded
- static void Function(String? documentId)? pspdfkitDocumentLoaded;
-
- static Future _platformCallHandler(MethodCall call) {
- try {
- switch (call.method) {
- case 'flutterPdfActivityOnPause':
- flutterPdfActivityOnPause?.call();
- break;
- case 'flutterPdfFragmentAdded':
- flutterPdfFragmentAdded?.call();
- break;
- case 'pdfViewControllerWillDismiss':
- pdfViewControllerWillDismiss?.call();
- break;
- case 'pdfViewControllerDidDismiss':
- pdfViewControllerDidDismiss?.call();
- break;
- case 'pspdfkitInstantSyncStarted':
- instantSyncStarted?.call(call.arguments as String);
- break;
- case 'pspdfkitInstantSyncFinished':
- instantSyncFinished?.call(call.arguments as String);
- break;
- case 'pspdfkitInstantSyncFailed':
- {
- final Map map =
- call.arguments as Map;
- instantSyncFailed?.call(
- map['documentId'] as String, map['error'] as String);
- break;
- }
- case 'pspdfkitInstantAuthenticationFinished':
- {
- final Map map =
- call.arguments as Map;
- instantAuthenticationFinished?.call(
- map['documentId'] as String, map['jwt'] as String);
- break;
- }
- case 'pspdfkitInstantAuthenticationFailed':
- {
- final Map arguments =
- call.arguments as Map;
- instantAuthenticationFailed?.call(arguments['documentId'] as String,
- arguments['error'] as String);
- break;
- }
- case 'pspdfkitInstantDownloadFinished':
- instantDownloadFinished?.call(call.arguments as String);
- break;
- case 'pspdfkitInstantDownloadFailed':
- {
- final Map arguments =
- call.arguments as Map;
- instantDownloadFailed?.call(arguments['documentId'] as String,
- arguments['error'] as String);
- break;
- }
- case 'pspdfkitDocumentLoaded':
- pspdfkitDocumentLoaded?.call(call.arguments as String);
- break;
- default:
- if (kDebugMode) {
- print('Unknown method ${call.method} ');
- }
- }
- } catch (e) {
- if (kDebugMode) {
- print(e);
- }
- }
- return Future.value();
+ static set instantAuthenticationFailed(
+ InstantAuthenticationFailedCallback? callback) {
+ PspdfkitFlutterPlatform.instance.instantAuthenticationFailed = callback;
+ }
+
+ /// Called when instant document download is done.Only available on iOS.
+ static set instantDownloadFinished(
+ InstantDownloadFinishedCallback? callback) {
+ PspdfkitFlutterPlatform.instance.instantDownloadFinished = callback;
+ }
+
+ /// Called when instant document download fails. Only available on iOS.
+ static set instantDownloadFailed(InstantDownloadFailedCallback? callback) {
+ PspdfkitFlutterPlatform.instance.instantDownloadFailed = callback;
}
}
diff --git a/lib/src/pspdfkit_flutter_method_channel.dart b/lib/src/pspdfkit_flutter_method_channel.dart
index c7a1cdd6..f5254406 100644
--- a/lib/src/pspdfkit_flutter_method_channel.dart
+++ b/lib/src/pspdfkit_flutter_method_channel.dart
@@ -8,7 +8,6 @@
///
///
import 'dart:io';
-
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:pspdfkit_flutter/pspdfkit.dart';
@@ -293,47 +292,58 @@ class MethodChannelPspdfkitFlutter extends PspdfkitFlutterPlatform {
}
/// onPause callback for FlutterPdfActivity
+
+ @override
+ set flutterPdfActivityOnPause(VoidCallback? flutterPdfActivityOnPause);
+
+ @override
+ set flutterPdfFragmentAdded(VoidCallback? flutterPdfFragmentAdded);
+
@override
- void Function()? flutterPdfActivityOnPause;
+ set flutterPdfDocumentLoaded(
+ PspdfkitDocumentLoadedCallback? flutterPdfDocumentLoaded);
/// ViewControllerWillDismiss callback for PDFViewController
@override
- void Function()? pdfViewControllerWillDismiss;
+ set pdfViewControllerWillDismiss(VoidCallback? pdfViewControllerWillDismiss);
/// ViewControllerDidDismiss callback for PDFViewController
@override
- void Function()? pdfViewControllerDidDismiss;
+ set pdfViewControllerDidDismiss(VoidCallback? pdfViewControllerDidDismiss);
/// Called when instant synchronization starts.
@override
- void Function(String? documentId)? instantSyncStarted;
+ set instantSyncStarted(InstantSyncStartedCallback? instantSyncStarted);
/// Called when instant synchronization ends.
@override
- void Function(String? documentId)? instantSyncFinished;
+ set instantSyncFinished(InstantSyncFinishedCallback? instantSyncFinished);
/// Called when instant synchronization fails.
@override
- void Function(String? documentId, String? error)? instantSyncFailed;
+ set instantSyncFailed(InstantSyncFailedCallback? instantSyncFailed);
/// Called when instant authentication is done.
@override
- void Function(String documentId, String? validJWT)?
- instantAuthenticationFinished;
+ set instantAuthenticationFinished(
+ InstantAuthenticationFinishedCallback? instantAuthenticationFinished);
/// Called when instant authentication fails.
@override
- void Function(String? documentId, String? error)? instantAuthenticationFailed;
+ set instantAuthenticationFailed(
+ InstantAuthenticationFailedCallback? instantAuthenticationFailed);
/// Only available on iOS.
/// Called when instant document download is done.
@override
- void Function(String? documentId)? instantDownloadFinished;
+ set instantDownloadFinished(
+ InstantDownloadFinishedCallback? instantDownloadFinished);
/// Only available on iOS.
/// Called when instant document download fails.
@override
- void Function(String? documentId, String? error)? instantDownloadFailed;
+ set instantDownloadFailed(
+ InstantDownloadFailedCallback? instantDownloadFailed);
Future _platformCallHandler(MethodCall call) {
try {
diff --git a/lib/src/pspdfkit_flutter_platform_interface.dart b/lib/src/pspdfkit_flutter_platform_interface.dart
index f074f0b7..641210a5 100644
--- a/lib/src/pspdfkit_flutter_platform_interface.dart
+++ b/lib/src/pspdfkit_flutter_platform_interface.dart
@@ -9,12 +9,24 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
-import 'package:flutter/services.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
import 'package:pspdfkit_flutter/pspdfkit.dart';
-
import 'pspdfkit_flutter_method_channel.dart';
+typedef InstantSyncStartedCallback = void Function(String? documentId);
+typedef InstantSyncFinishedCallback = void Function(String? documentId);
+typedef InstantSyncFailedCallback = void Function(
+ String? documentId, String? error);
+typedef InstantAuthenticationFinishedCallback = void Function(
+ String documentId, String? validJWT);
+typedef InstantAuthenticationFailedCallback = void Function(
+ String? documentId, String? error);
+typedef InstantDownloadFinishedCallback = void Function(String? documentId);
+typedef InstantDownloadFailedCallback = void Function(
+ String? documentId, String? error);
+
+typedef PspdfkitDocumentLoadedCallback = void Function(String documentId);
+
abstract class PspdfkitFlutterPlatform extends PlatformInterface {
/// Constructs a PspdfkitFlutterPlatform.
PspdfkitFlutterPlatform() : super(token: _token);
@@ -161,37 +173,40 @@ abstract class PspdfkitFlutterPlatform extends PlatformInterface {
Future getTemporaryDirectory();
/// onPAuse callback for FlutterPdfActivity
- void Function()? flutterPdfActivityOnPause;
+ VoidCallback? flutterPdfActivityOnPause;
+
+ VoidCallback? flutterPdfFragmentAdded;
+
+ PspdfkitDocumentLoadedCallback? flutterPdfDocumentLoaded;
/// ViewControllerWillDismiss callback for PDFViewController
- void Function()? pdfViewControllerWillDismiss;
+ VoidCallback? pdfViewControllerWillDismiss;
/// ViewControllerDidDismiss callback for PDFViewController
- void Function()? pdfViewControllerDidDismiss;
+ VoidCallback? pdfViewControllerDidDismiss;
/// Called when instant synchronization starts.
- void Function(String? documentId)? instantSyncStarted;
+ InstantSyncStartedCallback? instantSyncStarted;
/// Called when instant synchronization ends.
- void Function(String? documentId)? instantSyncFinished;
+ InstantSyncFinishedCallback? instantSyncFinished;
/// Called when instant synchronization fails.
- void Function(String? documentId, String? error)? instantSyncFailed;
+ InstantSyncFailedCallback? instantSyncFailed;
/// Called when instant authentication is done.
- void Function(String documentId, String? validJWT)?
- instantAuthenticationFinished;
+ InstantAuthenticationFinishedCallback? instantAuthenticationFinished;
/// Called when instant authentication fails.
- void Function(String? documentId, String? error)? instantAuthenticationFailed;
+ InstantAuthenticationFailedCallback? instantAuthenticationFailed;
/// Only available on iOS.
/// Called when instant document download is done.
- void Function(String? documentId)? instantDownloadFinished;
+ InstantDownloadFinishedCallback? instantDownloadFinished;
/// Only available on iOS.
/// Called when instant document download fails.
- void Function(String? documentId, String? error)? instantDownloadFailed;
+ InstantDownloadFailedCallback? instantDownloadFailed;
/// Gets the annotation author name.
String get authorName;
@@ -199,85 +214,4 @@ abstract class PspdfkitFlutterPlatform extends PlatformInterface {
/// Gets the default main toolbar [PspdfkitWebToolbarItem]s on Web.
/// Returns an empty list when called on other platforms.
List get defaultWebToolbarItems;
-
- static AndroidPermissionStatus _intToAndroidPermissionStatus(int status) {
- switch (status) {
- case 0:
- return AndroidPermissionStatus.notDetermined;
- case 1:
- return AndroidPermissionStatus.denied;
- case 2:
- return AndroidPermissionStatus.authorized;
- case 3:
- return AndroidPermissionStatus.deniedNeverAsk;
- default:
- return AndroidPermissionStatus.notDetermined;
- }
- }
-
- Future _platformCallHandler(MethodCall call) {
- try {
- switch (call.method) {
- case 'flutterPdfActivityOnPause':
- flutterPdfActivityOnPause?.call();
- break;
- case 'pdfViewControllerWillDismiss':
- pdfViewControllerWillDismiss?.call();
- break;
- case 'pdfViewControllerDidDismiss':
- pdfViewControllerDidDismiss?.call();
- break;
- case 'pspdfkitInstantSyncStarted':
- instantSyncStarted?.call(call.arguments as String);
- break;
- case 'pspdfkitInstantSyncFinished':
- instantSyncFinished?.call(call.arguments as String);
- break;
- case 'pspdfkitInstantSyncFailed':
- {
- final Map map =
- call.arguments as Map;
- instantSyncFailed?.call(
- map['documentId'] as String, map['error'] as String);
- break;
- }
- case 'pspdfkitInstantAuthenticationFinished':
- {
- final Map map =
- call.arguments as Map;
- instantAuthenticationFinished?.call(
- map['documentId'] as String, map['jwt'] as String);
- break;
- }
- case 'pspdfkitInstantAuthenticationFailed':
- {
- final Map arguments =
- call.arguments as Map;
- instantAuthenticationFailed?.call(arguments['documentId'] as String,
- arguments['error'] as String);
- break;
- }
- case 'pspdfkitInstantDownloadFinished':
- instantDownloadFinished?.call(call.arguments as String);
- break;
- case 'pspdfkitInstantDownloadFailed':
- {
- final Map arguments =
- call.arguments as Map;
- instantDownloadFailed?.call(arguments['documentId'] as String,
- arguments['error'] as String);
- break;
- }
- default:
- if (kDebugMode) {
- print('Unknown method ${call.method} ');
- }
- }
- } catch (e) {
- if (kDebugMode) {
- print(e);
- }
- }
- return Future.value();
- }
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 5f814b1a..5d384fb1 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.8.0
+version: 3.8.1
homepage: https://pspdfkit.com/
repository: https://github.com/PSPDFKit/pspdfkit-flutter
issue_tracker: https://support.pspdfkit.com/hc/en-us/requests/new