Browse Source

PDFView Flutter - 1.PDF阅读页开发 2.阅读设置交互

liuxiaolong 2 years ago
parent
commit
b5fc4562e3
28 changed files with 1062 additions and 83 deletions
  1. 3 5
      android/app/build.gradle
  2. 1 1
      android/app/src/debug/AndroidManifest.xml
  3. 2 2
      android/app/src/main/AndroidManifest.xml
  4. 66 0
      android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/ComPDFKitPlugin.kt
  5. 71 0
      android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/FlutterCPDFReaderView.kt
  6. 29 0
      android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/FlutterCPDFReaderViewFactory.kt
  7. 2 1
      android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/kmpdfkit_demo/MainActivity.kt
  8. 34 0
      android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/helpers/CPDFReaderViewHelpers.kt
  9. 18 0
      android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/helpers/Extensions.kt
  10. 126 0
      android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/helpers/PluginUtils.kt
  11. 77 0
      android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/view/PDFReaderView.kt
  12. 1 1
      android/app/src/profile/AndroidManifest.xml
  13. 3 3
      ios/Runner.xcodeproj/project.pbxproj
  14. 25 0
      lib/compdfkit.dart
  15. 87 17
      lib/main.dart
  16. 8 7
      lib/widgets/compdfkit_widget.dart
  17. 0 16
      lib/widgets/compdfkit_widget_controller.dart
  18. 13 0
      lib/widgets/config.dart
  19. 40 0
      lib/widgets/constains.dart
  20. 201 0
      lib/widgets/events.dart
  21. 4 0
      lib/widgets/function/pdf_function_page.dart
  22. 108 0
      lib/widgets/function/pdf_page_turning_widget.dart
  23. 72 0
      lib/widgets/page/pdf_page_widget.dart
  24. 59 0
      lib/widgets/page/setting_page_widget.dart
  25. 9 0
      lib/widgets/page_routes.dart
  26. 1 1
      linux/CMakeLists.txt
  27. 1 1
      macos/Runner/Configs/AppInfo.xcconfig
  28. 1 28
      pubspec.yaml

+ 3 - 5
android/app/build.gradle

@@ -43,14 +43,12 @@ android {
     }
 
     defaultConfig {
-        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
         applicationId "com.compdfkit.pdfviewer.flutter"
-        // You can update the following values to match your application needs.
-        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
         minSdkVersion 19
         targetSdkVersion flutter.targetSdkVersion
         versionCode flutterVersionCode.toInteger()
         versionName flutterVersionName
+        multiDexEnabled true
     }
 
     buildTypes {
@@ -68,8 +66,8 @@ flutter {
 
 dependencies {
     implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
-    api 'com.github.bumptech.glide:glide:4.12.0'
-    api 'androidx.appcompat:appcompat:1.6.0'
+    api 'com.github.bumptech.glide:glide:4.14.2'
+    api 'androidx.appcompat:appcompat:1.6.1'
     api 'com.google.android.material:material:1.8.0'
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
     implementation 'androidx.multidex:multidex:2.0.1'

+ 1 - 1
android/app/src/debug/AndroidManifest.xml

@@ -1,5 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.compdfkit.pdfviewer.flutter.kmpdfkit_demo">
+    package="com.compdfkit.pdfviewer.flutter">
     <!-- The INTERNET permission is required for development. Specifically,
          the Flutter tool needs it to communicate with the running application
          to allow setting breakpoints, to provide hot reload, etc.

+ 2 - 2
android/app/src/main/AndroidManifest.xml

@@ -1,7 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.compdfkit.pdfviewer.flutter.kmpdfkit_demo">
+    package="com.compdfkit.pdfviewer.flutter">
    <application
-        android:label="kmpdfkit_demo"
+        android:label="PDFViewer_Flutter"
         android:name="${applicationName}"
         android:icon="@mipmap/ic_launcher">
         <activity

+ 66 - 0
android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/ComPDFKitPlugin.kt

@@ -0,0 +1,66 @@
+package com.compdfkit.pdfviewer.flutter
+
+import android.util.Log
+import com.compdfkit.core.document.CPDFSdk
+import com.compdfkit.pdfviewer.flutter.helpers.PluginUtils.KEY_COMPDFKIT_VERSION
+import io.flutter.embedding.engine.plugins.FlutterPlugin
+import io.flutter.embedding.engine.plugins.activity.ActivityAware
+import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
+import io.flutter.plugin.common.BinaryMessenger
+import io.flutter.plugin.common.MethodCall
+import io.flutter.plugin.common.MethodChannel
+import io.flutter.plugin.common.MethodChannel.MethodCallHandler
+import io.flutter.plugin.platform.PlatformViewRegistry
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/3/7
+ * description:
+ */
+class ComPDFKitPlugin : MethodCallHandler, FlutterPlugin, ActivityAware {
+
+    val TAG = "ComPDFKitPlugin"
+    val viewType = "com.compdfkit.global"
+    val flutterPDFViewType = "com.compdfkit.pdf.flutter"
+    var mRegistry: PlatformViewRegistry? = null
+    var mMessenger: BinaryMessenger? = null
+    var mMethodChannel: MethodChannel? = null
+
+    override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
+        mMessenger = binding.binaryMessenger
+        mRegistry = binding.platformViewRegistry
+        mMethodChannel = MethodChannel(mMessenger!!, viewType)
+        mMethodChannel?.setMethodCallHandler(this)
+    }
+
+
+    override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
+        mRegistry = null
+        mMessenger = null
+        mMethodChannel?.setMethodCallHandler(null)
+    }
+
+    override fun onAttachedToActivity(binding: ActivityPluginBinding) {
+        mRegistry?.registerViewFactory(flutterPDFViewType, FlutterCPDFReaderViewFactory(mMessenger!!))
+    }
+
+    override fun onDetachedFromActivityForConfigChanges() {
+    }
+
+    override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
+    }
+
+    override fun onDetachedFromActivity() {
+    }
+
+    override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
+        Log.e(TAG, "call.methold: ${call.method}")
+        when(call.method){
+            KEY_COMPDFKIT_VERSION -> {
+                result.success(CPDFSdk.getSDKVersion())
+            }
+        }
+    }
+
+}

+ 71 - 0
android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/FlutterCPDFReaderView.kt

@@ -0,0 +1,71 @@
+package com.compdfkit.pdfviewer.flutter
+
+import android.content.Context
+import android.view.View
+import com.compdfkit.pdfviewer.flutter.helpers.PluginUtils
+import com.compdfkit.pdfviewer.flutter.helpers.PluginUtils.EVENT_CHANNEL_READER_VIEW_CALL_BACK
+import com.compdfkit.pdfviewer.flutter.view.PDFReaderView
+import io.flutter.plugin.common.BinaryMessenger
+import io.flutter.plugin.common.EventChannel
+import io.flutter.plugin.common.MethodCall
+import io.flutter.plugin.common.MethodChannel
+import io.flutter.plugin.platform.PlatformView
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/3/7
+ * description:
+ */
+class FlutterCPDFReaderView(
+    val context: Context,
+    id: Int,
+    val messenger: BinaryMessenger,
+    documentPath: String? = null,
+    configurationMap: HashMap<String, Any>? = null
+) : PlatformView, MethodChannel.MethodCallHandler {
+
+    private var readerView: PDFReaderView = PDFReaderView(context)
+
+    private var methodChannel: MethodChannel
+
+    init {
+        registerWith(messenger)
+        readerView.openDocument(documentPath)
+        PluginUtils.initPDFReaderViewConfig(readerView, configurationMap)
+        methodChannel = MethodChannel(messenger, "com.compdfkit.pdf.flutter")
+        methodChannel.setMethodCallHandler(this)
+
+    }
+
+
+    public fun registerWith(messenger: BinaryMessenger) {
+        val readerViewCallbackEventChannel = EventChannel(messenger, EVENT_CHANNEL_READER_VIEW_CALL_BACK)
+        readerViewCallbackEventChannel.setStreamHandler(object : EventChannel.StreamHandler {
+            override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
+                readerView.setReaderViewCallbackEventEmitter1(events)
+            }
+
+            override fun onCancel(arguments: Any?) {
+
+            }
+
+        })
+
+    }
+
+    override fun getView(): View {
+        return readerView
+    }
+
+    override fun dispose() {
+
+    }
+
+    override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
+        PluginUtils.onCallMethod(pdfReaderView = readerView, call, result)
+    }
+
+
+}
+

+ 29 - 0
android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/FlutterCPDFReaderViewFactory.kt

@@ -0,0 +1,29 @@
+package com.compdfkit.pdfviewer.flutter
+
+import android.content.Context
+import com.compdfkit.pdfviewer.flutter.FlutterCPDFReaderView
+import io.flutter.plugin.common.BinaryMessenger
+import io.flutter.plugin.common.StandardMessageCodec
+import io.flutter.plugin.platform.PlatformView
+import io.flutter.plugin.platform.PlatformViewFactory
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/3/8
+ * description:
+ */
+
+class FlutterCPDFReaderViewFactory(val binaryMessenger: BinaryMessenger) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
+
+    override fun create(context: Context?, viewId: Int, args: Any?): PlatformView {
+        val creationParams = args as Map<String?, Any?>?
+        return FlutterCPDFReaderView(
+            context = context!!,
+            id = viewId,
+            messenger = binaryMessenger,
+            documentPath = creationParams?.get("document") as String?,
+            configurationMap = creationParams?.get("configuration") as? HashMap<String, Any>?
+        );
+    }
+}

+ 2 - 1
android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/kmpdfkit_demo/MainActivity.kt

@@ -1,4 +1,4 @@
-package com.compdfkit.pdfviewer.flutter.kmpdfkit_demo
+package com.compdfkit.pdfviewer.flutter
 
 import io.flutter.embedding.android.FlutterActivity
 import io.flutter.embedding.engine.FlutterEngine
@@ -8,6 +8,7 @@ class MainActivity: FlutterActivity() {
 
     override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
         super.configureFlutterEngine(flutterEngine)
+        flutterEngine.plugins.add(ComPDFKitPlugin())
     }
 
 }

+ 34 - 0
android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/helpers/CPDFReaderViewHelpers.kt

@@ -0,0 +1,34 @@
+package com.compdfkit.pdfviewer.flutter.helpers
+
+import android.content.Context
+import com.compdfkit.core.document.CPDFDocument
+import com.compdfkit.ui.reader.CPDFReaderView
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/3/7
+ * description:
+ */
+object CPDFReaderViewHelpers {
+
+
+    fun openDocument(context: Context, documentPath : String?, success : (CPDFDocument) -> Unit, isEncrypt : ()-> Unit, errorResult : (CPDFDocument.PDFDocumentError)-> Unit){
+
+        var document = CPDFDocument(context)
+        val error = document.open(documentPath)
+        when(error){
+            CPDFDocument.PDFDocumentError.PDFDocumentErrorSuccess->{
+                success.invoke(document)
+            }
+            CPDFDocument.PDFDocumentError.PDFDocumentErrorPassword->{
+                isEncrypt.invoke()
+            }
+            else -> {
+                errorResult.invoke(error)
+            }
+        }
+
+    }
+
+}

+ 18 - 0
android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/helpers/Extensions.kt

@@ -0,0 +1,18 @@
+package com.compdfkit.pdfviewer.flutter.helpers
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/3/9
+ * description:
+ */
+
+
+fun Map<String, Any>?.getBoolean(key: String): Boolean? {
+    return this?.get(key) as? Boolean
+}
+
+fun Map<String, Any>?.getString(key: String): String? {
+    return this?.get(key) as? String
+}
+

+ 126 - 0
android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/helpers/PluginUtils.kt

@@ -0,0 +1,126 @@
+package com.compdfkit.pdfviewer.flutter.helpers
+
+import com.compdfkit.pdfviewer.flutter.view.PDFReaderView
+import io.flutter.plugin.common.MethodCall
+import io.flutter.plugin.common.MethodChannel
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/3/7
+ * description:
+ */
+object PluginUtils {
+
+
+    const val EVENT_CHANNEL_READER_VIEW_CALL_BACK = "event_reader_view_call_back"
+
+    //get ComPDFKit Version info
+    const val KEY_COMPDFKIT_VERSION = "ComPDFKitVersion"
+
+
+    const val EVENT_ON_TAP_MAIN_DOC_AREA = "onTapMainDocArea"
+    const val EVENT_ON_MOVE_TO_CHILD = "onMoveToChild"
+    const val EVENT_ON_SCROLL_END = "onScrollEnd"
+    const val EVENT_ON_SCROLLING = "onScrolling"
+    const val EVENT_ON_RECORD_LAST_JUMP_PAGE_NUM = "onRecordLastJumpPageNum"
+
+
+    const val KEY_SCROLL_DIRECTION = "scrollDirection"
+    const val KEY_IS_DOUBLE_PAGE = "isDoublePage"
+    const val KEY_IS_CONTINUE_MODE = "isContinueMode"
+    const val KEY_IS_COVER_PAGE_MODE = "isCoverPageMode"
+    const val KEY_IS_CROP_PAGE_MODE = "isCropPageMode"
+
+    const val SCROLL_DIRECTION_VERTICAL = "vertical"
+    const val SCROLL_DIRECTION_HORIZONTAL = "horizontal"
+
+    const val PAGE_MODE_IS_DOUBLE_PAGE = "isDoublePage"
+
+    const val FUNCTION_SET_SCROLL_DIRECTION = "setScrollDirection"
+    const val FUNCTION_GET_SCROLL_DIRECTION = "getScrollDirection"
+    const val FUNCTION_SET_PAGE_MODE = "setPageMode"
+    const val FUNCTION_GET_PAGE_MODE = "getPageMode"
+    const val FUNCTION_SET_IS_CONTINUE_MODE = "setPageContinue"
+    const val FUNCTION_GET_IS_CONTINUE_MODE = "getPageContinue"
+    const val FUNCTION_SET_IS_COVER_PAGE_MODE = "setCoverPageMode"
+    const val FUNCTION_GET_IS_COVER_PAGE_MODE = "isCoverPageMode"
+    const val FUNCTION_GET_IS_CROP_PAGE_MODE = "isCropPageMode"
+    const val FUNCTION_SET_IS_CROP_PAGE_MODE = "setIsCropPageMode"
+
+
+    fun initPDFReaderViewConfig(pdfReaderView: PDFReaderView, configurationMap: HashMap<String, Any>? = null) {
+
+        configurationMap.getString(KEY_SCROLL_DIRECTION)?.let {
+            pdfReaderView.pdfReaderView.isVerticalMode = it == SCROLL_DIRECTION_VERTICAL
+        }
+        configurationMap.getBoolean(KEY_IS_DOUBLE_PAGE)?.let {
+            pdfReaderView.pdfReaderView.isDoublePageMode = it
+        }
+        configurationMap.getBoolean(KEY_IS_CONTINUE_MODE)?.let {
+            pdfReaderView.pdfReaderView.isContinueMode = it
+        }
+        configurationMap.getBoolean(KEY_IS_COVER_PAGE_MODE)?.let {
+            pdfReaderView.pdfReaderView.isCoverPageMode = it
+        }
+        configurationMap.getBoolean(KEY_IS_CROP_PAGE_MODE)?.let {
+            pdfReaderView.pdfReaderView.isCropMode = it
+        }
+
+    }
+
+
+    fun onCallMethod(pdfReaderView: PDFReaderView, call: MethodCall, result: MethodChannel.Result) {
+        val configuration = call.arguments as? HashMap<String, Any>
+        when (call.method) {
+            FUNCTION_GET_SCROLL_DIRECTION -> {
+                result.success(if (pdfReaderView.pdfReaderView.isVerticalMode) SCROLL_DIRECTION_VERTICAL else SCROLL_DIRECTION_HORIZONTAL)
+            }
+            FUNCTION_SET_SCROLL_DIRECTION -> {
+                (configuration?.get(KEY_SCROLL_DIRECTION) as? String)?.let {
+                    pdfReaderView.pdfReaderView.isVerticalMode = it == SCROLL_DIRECTION_VERTICAL
+                    result.success(if (pdfReaderView.pdfReaderView.isVerticalMode) SCROLL_DIRECTION_VERTICAL else SCROLL_DIRECTION_HORIZONTAL)
+                }
+            }
+            FUNCTION_GET_PAGE_MODE -> {
+                result.success(pdfReaderView.pdfReaderView.isDoublePageMode)
+            }
+            FUNCTION_SET_PAGE_MODE -> {
+                (configuration?.get(KEY_IS_DOUBLE_PAGE) as? Boolean)?.let {
+                    pdfReaderView.pdfReaderView.isDoublePageMode = it
+                    result.success(pdfReaderView.pdfReaderView.isDoublePageMode)
+                }
+            }
+            FUNCTION_SET_IS_CONTINUE_MODE -> {
+                (configuration?.get(KEY_IS_CONTINUE_MODE) as? Boolean)?.let {
+                    pdfReaderView.pdfReaderView.isContinueMode = it
+                    result.success(pdfReaderView.pdfReaderView.isContinueMode)
+                }
+            }
+            FUNCTION_GET_IS_CONTINUE_MODE -> {
+                result.success(pdfReaderView.pdfReaderView.isContinueMode)
+            }
+            FUNCTION_GET_IS_COVER_PAGE_MODE ->{
+                result.success(pdfReaderView.pdfReaderView.isCoverPageMode)
+            }
+            FUNCTION_SET_IS_COVER_PAGE_MODE -> {
+                (configuration?.get(KEY_IS_COVER_PAGE_MODE) as? Boolean)?.let {
+                    pdfReaderView.pdfReaderView.isCoverPageMode = it
+                    result.success(pdfReaderView.pdfReaderView.isCoverPageMode)
+                }
+            }
+            FUNCTION_GET_IS_CROP_PAGE_MODE ->{
+                result.success(pdfReaderView.pdfReaderView.isCropMode)
+            }
+            FUNCTION_SET_IS_CROP_PAGE_MODE -> {
+                (configuration?.get(KEY_IS_CROP_PAGE_MODE) as? Boolean)?.let {
+                    pdfReaderView.pdfReaderView.isCropMode = it
+                    result.success(pdfReaderView.pdfReaderView.isCropMode)
+                }
+            }
+            else -> {}
+        }
+    }
+
+
+}

+ 77 - 0
android/app/src/main/kotlin/com/compdfkit/pdfviewer/flutter/view/PDFReaderView.kt

@@ -0,0 +1,77 @@
+package com.compdfkit.pdfviewer.flutter.view
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import android.widget.RelativeLayout
+import com.compdfkit.pdfviewer.flutter.helpers.CPDFReaderViewHelpers
+import com.compdfkit.pdfviewer.flutter.helpers.PluginUtils.EVENT_ON_MOVE_TO_CHILD
+import com.compdfkit.pdfviewer.flutter.helpers.PluginUtils.EVENT_ON_RECORD_LAST_JUMP_PAGE_NUM
+import com.compdfkit.pdfviewer.flutter.helpers.PluginUtils.EVENT_ON_SCROLLING
+import com.compdfkit.pdfviewer.flutter.helpers.PluginUtils.EVENT_ON_SCROLL_END
+import com.compdfkit.pdfviewer.flutter.helpers.PluginUtils.EVENT_ON_TAP_MAIN_DOC_AREA
+import com.compdfkit.ui.reader.IReaderViewCallback
+import io.flutter.plugin.common.EventChannel
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2023/3/8
+ * description:
+ */
+class PDFReaderView(context: Context?) : RelativeLayout(context), IReaderViewCallback {
+
+    open var pdfReaderView = com.compdfkit.ui.reader.CPDFReaderView(context)
+    private var readerViewCallbackEventEmitter: EventChannel.EventSink? = null
+
+    init {
+        pdfReaderView.setReaderViewCallback(this)
+        addView(pdfReaderView)
+
+    }
+
+
+    fun openDocument(documentPath: String?) {
+        CPDFReaderViewHelpers.openDocument(context, documentPath,
+            success = {
+                pdfReaderView.pdfDocument = it
+                pdfReaderView.reloadPages()
+            }, isEncrypt = {
+
+            }, errorResult = {
+
+            })
+    }
+
+
+    override fun onTapMainDocArea() {
+        readerViewCallbackEventEmitter?.success(mapOf("parametersKey" to EVENT_ON_TAP_MAIN_DOC_AREA))
+    }
+
+    override fun onMoveToChild(pageIndex: Int) {
+        readerViewCallbackEventEmitter?.success(mapOf("parametersKey" to EVENT_ON_MOVE_TO_CHILD, "pageIndex" to pageIndex))
+
+    }
+
+    override fun onEndScroll() {
+        readerViewCallbackEventEmitter?.success(mapOf("parametersKey" to EVENT_ON_SCROLL_END))
+    }
+
+    override fun onScrolling() {
+        readerViewCallbackEventEmitter?.success(mapOf("parametersKey" to EVENT_ON_SCROLLING))
+
+    }
+
+    override fun onRecordLastJumpPageNum(pageIndex: Int) {
+        readerViewCallbackEventEmitter?.success(mapOf("parametersKey" to EVENT_ON_RECORD_LAST_JUMP_PAGE_NUM, "pageIndex" to pageIndex))
+    }
+
+
+    fun setReaderViewCallbackEventEmitter1(emitter: EventChannel.EventSink?) {
+        this.readerViewCallbackEventEmitter = emitter
+    }
+
+
+
+
+}

+ 1 - 1
android/app/src/profile/AndroidManifest.xml

@@ -1,5 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.compdfkit.pdfviewer.flutter.kmpdfkit_demo">
+    package="com.compdfkit.pdfviewer.flutter">
     <!-- The INTERNET permission is required for development. Specifically,
          the Flutter tool needs it to communicate with the running application
          to allow setting breakpoints, to provide hot reload, etc.

+ 3 - 3
ios/Runner.xcodeproj/project.pbxproj

@@ -307,7 +307,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				PRODUCT_BUNDLE_IDENTIFIER = com.compdfkit.pdfviewer.flutter.kmpdfkitDemo;
+				PRODUCT_BUNDLE_IDENTIFIER = com.compdfkit.pdfviewer.flutter;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				VERSIONING_SYSTEM = "apple-generic";
 			};
@@ -431,7 +431,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				PRODUCT_BUNDLE_IDENTIFIER = com.compdfkit.pdfviewer.flutter.kmpdfkitDemo;
+				PRODUCT_BUNDLE_IDENTIFIER = com.compdfkit.pdfviewer.flutter;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				VERSIONING_SYSTEM = "apple-generic";
 			};
@@ -450,7 +450,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				PRODUCT_BUNDLE_IDENTIFIER = com.compdfkit.pdfviewer.flutter.kmpdfkitDemo;
+				PRODUCT_BUNDLE_IDENTIFIER = com.compdfkit.pdfviewer.flutter;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				VERSIONING_SYSTEM = "apple-generic";
 			};

+ 25 - 0
lib/compdfkit.dart

@@ -0,0 +1,25 @@
+import 'package:flutter/services.dart';
+
+class ComPDFKit {
+  static MethodChannel? _privateChannel;
+
+  static MethodChannel get _channel {
+    if (_privateChannel == null) {
+      _privateChannel = const MethodChannel('com.compdfkit.global');
+      _privateChannel?.setMethodCallHandler(_platformCallHandler);
+    }
+    return _privateChannel!;
+  }
+
+
+  static Future<void> _platformCallHandler(MethodCall call)  {
+    return Future.value();
+  }
+
+  /// gets the ComPDFKit SDK Version Code
+  static Future<String?> getComPDFKitVersionCode() async => _channel.invokeMethod('ComPDFKitVersion');
+
+
+
+
+}

+ 87 - 17
lib/main.dart

@@ -1,7 +1,20 @@
+import 'package:file_picker/file_picker.dart';
 import 'package:flutter/material.dart';
+import 'package:kmpdfkit_demo/compdfkit.dart';
+import 'package:kmpdfkit_demo/widgets/page/pdf_page_widget.dart';
+import 'package:kmpdfkit_demo/widgets/page/setting_page_widget.dart';
+import 'package:kmpdfkit_demo/widgets/page_routes.dart';
+import 'package:permission_handler/permission_handler.dart';
 
 void main() {
-  runApp(const MyApp());
+  runApp(MaterialApp(
+    home: const MyApp(),
+    initialRoute: PageRoutes.home,
+    routes: {
+      PageRoutes.home: (context) => const MyApp(),
+      PageRoutes.settings: (context) => const SettingPageWidget()
+    },
+  ));
 }
 
 class MyApp extends StatefulWidget {
@@ -12,23 +25,80 @@ class MyApp extends StatefulWidget {
 }
 
 class _MyAppState extends State<MyApp> {
+  String _comPDFKitVersion = '';
+
+  @override
+  void initState() {
+    super.initState();
+    initPlatformState();
+  }
+
   @override
   Widget build(BuildContext context) {
-    return MaterialApp(
-        home: Scaffold(
-      appBar: AppBar(
-        title: Text('ComPDFKit'),
-      ),
-      body: Padding(padding: EdgeInsets.all(8), child: Column(
-        children: [
-          SizedBox(
-              width: double.infinity,
-              child: ElevatedButton(
-                onPressed: () {},
-                child: const Text('Simple PDF Viewer'),
-              ))
-        ],
-      ),)
-    ));
+    return Scaffold(
+        appBar: AppBar(
+          title: Text(comPDFKitVersion()),
+        ),
+        body: Padding(
+          padding: const EdgeInsets.all(8),
+          child: Column(
+            children: [
+              Builder(
+                  builder: (BuildContext context) => SizedBox(
+                      width: double.infinity,
+                      child: ElevatedButton(
+                        onPressed: () {
+                          showDocument(context);
+                        },
+                        child: const Text('Simple PDF Viewer'),
+                      )))
+            ],
+          ),
+        ));
+  }
+
+  void initPlatformState() async {
+    String? comPDFKitVersion = await ComPDFKit.getComPDFKitVersionCode();
+
+    setState(() {
+      _comPDFKitVersion = comPDFKitVersion ?? '';
+    });
+  }
+
+  String comPDFKitVersion() {
+    return 'ComPDFKit $_comPDFKitVersion';
+  }
+
+  ///request storage permission
+  Future<bool> getPermission() async {
+    var status = await Permission.storage.request();
+    return status.isGranted;
+  }
+
+  Future<String?> getPDFFile() async {
+    bool isGranted = await getPermission();
+    if (!isGranted) {
+      return null;
+    }
+    FilePickerResult? result = await FilePicker.platform.pickFiles(
+        type: FileType.custom,
+        allowedExtensions: ['pdf'],
+        allowMultiple: false);
+    if (result != null) {
+      List<String?> files = result.paths;
+      return files[0];
+    } else {
+      return null;
+    }
+  }
+
+  void showDocument(BuildContext context) async {
+    var documentPath = await getPDFFile();
+    if (documentPath != null) {
+      await Navigator.of(context).push<dynamic>(MaterialPageRoute<dynamic>(
+          builder: (_) => PDFPageWidget(
+                documentPath: documentPath,
+              )));
+    }
   }
 }

+ 8 - 7
lib/widgets/compdfkit_widget.dart

@@ -5,10 +5,8 @@ import 'package:flutter/gestures.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter/services.dart';
-import 'package:kmpdfkit_demo/widgets/compdfkit_widget_controller.dart';
 
-typedef ComPDFKitWidgetCreateCallback = void Function(
-    ComPDFKitWidgetController view);
+typedef ComPDFKitWidgetCreateCallback = void Function();
 
 class ComPDFKitWidget extends StatefulWidget {
   final String? documentPath;
@@ -27,11 +25,13 @@ class ComPDFKitWidget extends StatefulWidget {
 }
 
 class _ComPDFKitWidgetState extends State<ComPDFKitWidget> {
-  late ComPDFKitWidgetController controller;
-
   @override
   Widget build(BuildContext context) {
     const String viewType = 'com.compdfkit.pdf.flutter';
+    final Map<String, dynamic> creationParams = <String, dynamic>{
+      'document': widget.documentPath,
+      'configuration': widget.configuration
+    };
 
     if (Platform.isAndroid) {
       return PlatformViewLink(
@@ -47,6 +47,8 @@ class _ComPDFKitWidgetState extends State<ComPDFKitWidget> {
             return PlatformViewsService.initSurfaceAndroidView(
                 id: params.id,
                 viewType: viewType,
+                creationParams: creationParams,
+                creationParamsCodec: const StandardMessageCodec(),
                 layoutDirection: TextDirection.ltr)
               ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
               ..addOnPlatformViewCreatedListener(onPlatformViewCreated)
@@ -61,9 +63,8 @@ class _ComPDFKitWidgetState extends State<ComPDFKitWidget> {
   }
 
   Future<void> onPlatformViewCreated(int id) async {
-    controller = ComPDFKitWidgetController(id);
     if (widget.onComPDFKitWidgetCreate != null) {
-      widget.onComPDFKitWidgetCreate!(controller);
+      widget.onComPDFKitWidgetCreate!();
     }
   }
 }

+ 0 - 16
lib/widgets/compdfkit_widget_controller.dart

@@ -1,16 +0,0 @@
-
-
-import 'package:flutter/services.dart';
-
-class ComPDFKitWidgetController {
-  final MethodChannel _channel;
-
-  ComPDFKitWidgetController(int id) : _channel = MethodChannel('com.compdfkit.pdf.flutter.$id');
-
-
-
-
-
-
-
-}

+ 13 - 0
lib/widgets/config.dart

@@ -0,0 +1,13 @@
+
+
+
+import 'package:kmpdfkit_demo/widgets/constains.dart';
+
+
+Map<String, dynamic> applyNormalConfiguration() => const {
+  'scrollDirection' : ScrollDirection.vertical,
+  'isDoublePage' : false,
+  'isContinueMode' : true,
+  'isCoverPageMode' : false,
+  'isCropPageMode' : false
+};

+ 40 - 0
lib/widgets/constains.dart

@@ -0,0 +1,40 @@
+class ChannelNames {
+  static const EVENT_READER_VIEW_CALL_BACK = 'event_reader_view_call_back';
+
+  static const EVENT_CPDF_READER_VIEW = 'com.compdfkit.pdf.flutter';
+}
+
+
+class Functions {
+  static const getScrollDirection = 'getScrollDirection';
+  static const setScrollDirection = 'setScrollDirection';
+  static const setPageMode = 'setPageMode';
+  static const getPageMode = 'getPageMode';
+  static const setPageContinue = 'setPageContinue';
+  static const getPageContinue = 'getPageContinue';
+  static const isCoverPageMode = 'isCoverPageMode';
+  static const setCoverPageMode = 'setCoverPageMode';
+  static const isCropPageMode = 'isCropPageMode';
+  static const setIsCropPageMode = 'setIsCropPageMode';
+
+}
+
+class EventParameters {
+  static const parametersKey = 'parametersKey';
+  static const onTapMainDocArea = 'onTapMainDocArea';
+  static const onMoveToChild = 'onMoveToChild';
+  static const onScrollEnd = 'onScrollEnd';
+  static const onScrolling = 'onScrolling';
+  static const onRecordLastJumpPageNum = 'onRecordLastJumpPageNum';
+  static const pageIndex = 'pageIndex';
+  static const scrollDirection = 'scrollDirection';
+  static const isDoublePage = 'isDoublePage';
+  static const isContinueMode = 'isContinueMode';
+  static const isCoverPageMode = 'isCoverPageMode';
+  static const isCropPageMode = 'isCropPageMode';
+}
+
+class ScrollDirection {
+  static const vertical = 'vertical';
+  static const horizontal = 'horizontal';
+}

+ 201 - 0
lib/widgets/events.dart

@@ -0,0 +1,201 @@
+import 'dart:ffi';
+
+import 'package:flutter/services.dart';
+import 'package:kmpdfkit_demo/widgets/constains.dart';
+
+const _methodChannel = MethodChannel(ChannelNames.EVENT_CPDF_READER_VIEW);
+
+//Listen to PDFReaderView events.
+const _readerViewCallBackEventChannel =
+    EventChannel(ChannelNames.EVENT_READER_VIEW_CALL_BACK);
+
+typedef CancelListener = void Function();
+
+enum eventSinkId {
+  readerViewCallBack,
+}
+
+/// Listen to PDFReaderView events<br>
+/// onTapMainDocArea : Click CPDFReaderView display area callback
+/// onMoveToChild : The pdf document is moved to the specified page, and the page number is returned by 'pageIndex'
+/// onRecordLastJumpNum : Returns the page number of the last record and returns the page number via the 'pageIndex' parameter
+/// onScrolling : CPDFReaderView page sliding monitoring
+/// onScrollEnd : CPDFReaderView page sliding end monitoring
+///
+///Please use in addOnPlatformViewCreatedListener
+///```dart
+///              ..addOnPlatformViewCreatedListener((id) {
+///                 setReaderViewCallbackListener(
+///                     onTapMainDocArea: () {
+///                       print("onTapMainDocArea");
+///                     },
+///                     onMoveToChild: (pageIndex) {},
+///                     onScrolling: () {},
+///                     onScrollEnd: () {},
+///                     onRecordLastJumpPageNum: (pageIndex) {});
+///               })
+///```
+///
+CancelListener setReaderViewCallbackListener(
+    {VoidCallback? onTapMainDocArea,
+    Function(int pageIndex)? onMoveToChild,
+    VoidCallback? onScrolling,
+    VoidCallback? onScrollEnd,
+    Function(int pageIndex)? onRecordLastJumpPageNum}) {
+  var subscription = _readerViewCallBackEventChannel
+      .receiveBroadcastStream(eventSinkId.readerViewCallBack.index)
+      .listen((data) {
+    Map<dynamic, dynamic> result = data;
+    String key = result[EventParameters.parametersKey];
+    switch (key) {
+      case EventParameters.onTapMainDocArea:
+        if (onTapMainDocArea != null) {
+          onTapMainDocArea();
+        }
+        break;
+      case EventParameters.onMoveToChild:
+        if (onMoveToChild != null) {
+          int pageIndex = result[EventParameters.pageIndex];
+          onMoveToChild(pageIndex);
+        }
+        break;
+      case EventParameters.onRecordLastJumpPageNum:
+        if (onRecordLastJumpPageNum != null) {
+          int pageIndex = result[EventParameters.pageIndex];
+          onRecordLastJumpPageNum(pageIndex);
+        }
+
+        break;
+      case EventParameters.onScrollEnd:
+        if (onScrollEnd != null) {
+          onScrollEnd();
+        }
+        break;
+      case EventParameters.onScrolling:
+        if (onScrolling != null) {
+          onScrolling();
+        }
+        break;
+      default:
+        break;
+    }
+  }, cancelOnError: true);
+  return () {
+    subscription.cancel();
+  };
+}
+
+///get current CPDFReaderView scroll direction
+///true : [ScrollDirection.vertical]
+///false : [ScrollDirection.horizontal]
+///```dart
+/// bool isVertical = await scrollDirectionIsVerticalMode();
+/// ```
+Future<bool> scrollDirectionIsVerticalMode() async {
+  String scrollDirection =
+      await _methodChannel.invokeMethod(Functions.getScrollDirection);
+  return scrollDirection == ScrollDirection.vertical;
+}
+
+/// set CPDFReaderView scroll direction
+///```dart
+///bool isVertical = await setScrollDirection(direction);
+///
+///```
+/// Returns the current scroll direction
+/// true : [ScrollDirection.vertical]
+/// false : [ScrollDirection.horizontal]
+///
+Future<bool> setScrollDirection(String direction) async {
+  String scrollDirection = await _methodChannel.invokeMethod(
+      Functions.setScrollDirection,
+      {EventParameters.scrollDirection: direction});
+  return scrollDirection == ScrollDirection.vertical;
+}
+
+///Get the current CPDFReaderView page mode
+///```dart
+/// bool doublePage = await isDoublePage();
+///
+///```
+Future<bool> isDoublePage() async {
+  return await _methodChannel.invokeMethod(Functions.getPageMode);
+}
+
+///set page mode
+///true: double page
+///false: single page
+///```dart
+/// bool isDoublePage = await setPageMode(doublePage);
+///
+///```
+Future<bool> setPageMode(bool doublePage) async {
+  return await _methodChannel.invokeMethod(
+      Functions.setPageMode, {EventParameters.isDoublePage: doublePage});
+}
+
+///Get whether 'CPDFReaderView' is in continuous scrolling mode
+///```dart
+///     bool isContinue = await isContinueMode();
+/// ```
+Future<bool> isContinueMode() async {
+  return await _methodChannel.invokeMethod(Functions.getPageContinue);
+}
+
+
+///Set page scrolling mode
+///true: continue Mode
+///```dart
+///     bool isContinueMode = await setIsContinueMode(isContinueMode);
+/// ```
+Future<bool> setIsContinueMode(bool isContinueMode) async {
+  return await _methodChannel.invokeMethod(Functions.setPageContinue, {EventParameters.isContinueMode : isContinueMode});
+}
+
+
+///Get whether 'ComPDFReaderView' is in cover display mode
+///```dart
+///     bool isCoverPageMode = await isCoverPageMode();
+/// ```
+Future<bool> isCoverPageMode() async {
+  return await _methodChannel.invokeMethod(Functions.isCoverPageMode);
+}
+
+
+///set is cover display mode
+///true: is cover page mode
+///```dart
+///     bool isCoverPageMode = await setIsCoverPageMode(isCoverPageMode);
+/// ```
+Future<bool> setIsCoverPageMode(bool isCoverPageMode) async {
+  return await _methodChannel.invokeMethod(Functions.setCoverPageMode, {EventParameters.isCoverPageMode : isCoverPageMode});
+}
+
+
+///Get 'ComPDFReaderView' whether to crop the display mode
+///```dart
+///     bool isCropMode = await isCropPageMode();
+/// ```
+Future<bool> isCropPageMode() async {
+  return await _methodChannel.invokeMethod(Functions.isCropPageMode);
+}
+
+
+///set is crop display mode
+///true: is crop page mode
+///```dart
+///     bool isCropMode = await setIsCropPageMode(isCropPageMode);
+/// ```
+Future<bool> setIsCropPageMode(bool isCropPageMode) async {
+  return await _methodChannel.invokeMethod(Functions.setIsCropPageMode, {EventParameters.isCropPageMode : isCropPageMode});
+}
+
+
+
+
+
+
+
+
+
+

+ 4 - 0
lib/widgets/function/pdf_function_page.dart

@@ -0,0 +1,4 @@
+import 'package:flutter/material.dart';
+
+
+

+ 108 - 0
lib/widgets/function/pdf_page_turning_widget.dart

@@ -0,0 +1,108 @@
+import 'package:flutter/material.dart';
+import 'package:kmpdfkit_demo/widgets/constains.dart';
+import 'package:kmpdfkit_demo/widgets/events.dart';
+
+class PDFPageTurningWidget extends StatefulWidget {
+
+  const PDFPageTurningWidget({Key? key}) : super(key: key);
+
+  @override
+  State<PDFPageTurningWidget> createState() => _PDFPageTurningWidgetState();
+}
+
+class _PDFPageTurningWidgetState extends State<PDFPageTurningWidget> {
+  bool _isVertical = true;
+  bool _isContinue = true;
+  bool _isDoublePage = false;
+  bool _coverPageMode = false;
+  bool _isCropPageMode = false;
+
+
+  @override
+  void initState() {
+    super.initState();
+    initPageTurning();
+  }
+
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      children: [
+        item('Vertical', _isVertical, (value) async {
+          setScrollDirection(value ? ScrollDirection.vertical : ScrollDirection.horizontal).then((value){
+            setState(() {
+              _isVertical = value;
+            });
+          });
+        }),
+        item('Continue', _isContinue, (value) {
+          setIsContinueMode(value).then((value) {
+            print('isContinue:$value');
+            setState(() {
+              _isContinue = value;
+            });
+          });
+        }),
+        item('Double page', _isDoublePage, (value) async {
+          setPageMode(value).then((value) {
+            setState(() {
+              _isDoublePage = value;
+            });
+          });
+        }),
+        item('Cover page', _coverPageMode, (value) {
+          setIsCoverPageMode(value).then((value){
+            setState(() {
+              _coverPageMode = value;
+            });
+          });
+        }),
+        item('Crop page', _isCropPageMode, (value) {
+          setIsCropPageMode(value).then((value){
+            setState(() {
+              _isCropPageMode = value;
+            });
+          });
+        }),
+      ],
+    );
+  }
+
+  Widget item(String title, bool value, ValueChanged<bool> callback) {
+    return Container(
+      padding: const EdgeInsets.symmetric(horizontal: 8),
+      height: 50,
+      child: Row(
+        mainAxisAlignment: MainAxisAlignment.spaceBetween,
+        children: [
+          Text(
+            title,
+            style: const TextStyle(fontSize: 16),
+          ),
+          Switch(value: value, onChanged: callback)
+        ],
+      ),
+    );
+  }
+
+
+  void initPageTurning() async {
+
+    bool isVertical = await scrollDirectionIsVerticalMode();
+    bool doublePage = await isDoublePage();
+    bool isContinue = await isContinueMode();
+    bool isCoverMode = await isCoverPageMode();
+    bool isCropMode = await isCropPageMode();
+    setState(() {
+      _isVertical = isVertical;
+      _isDoublePage = doublePage;
+      _isContinue = isContinue;
+      _coverPageMode = isCoverMode;
+      _isCropPageMode = isCropMode;
+    });
+
+  }
+
+
+}

+ 72 - 0
lib/widgets/page/pdf_page_widget.dart

@@ -0,0 +1,72 @@
+import 'package:flutter/material.dart';
+import 'package:kmpdfkit_demo/widgets/compdfkit/compdfkit_widget.dart';
+import 'package:kmpdfkit_demo/widgets/config.dart';
+import 'package:kmpdfkit_demo/widgets/events.dart';
+import 'package:kmpdfkit_demo/widgets/page_routes.dart';
+
+
+class PDFPageWidget extends StatefulWidget {
+  final String? documentPath;
+
+  const PDFPageWidget({Key? key, this.documentPath}) : super(key: key);
+
+  @override
+  State<PDFPageWidget> createState() => _PDFPageWidgetState();
+}
+
+class _PDFPageWidgetState extends State<PDFPageWidget> {
+  bool _fullScreen = false;
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(body: Stack(
+      children: [
+        SafeArea(
+            child: ComPDFKitWidget(
+              documentPath: widget.documentPath,
+              configuration: applyNormalConfiguration(),
+              onComPDFKitWidgetCreate: () {
+                setReaderViewCallbackListener(
+                    onTapMainDocArea: () {
+                      setState(() {
+                        _fullScreen = !_fullScreen;
+                      });
+                    }
+                );
+              },
+            )),
+        Builder(builder: (context) {
+          return Positioned(
+              top: 0,
+              left: 0,
+              right: 0,
+              child: AnimatedOpacity(
+                  opacity: _fullScreen ? 0.0 : 1.0,
+                  duration: const Duration(milliseconds: 200),
+                  child: AppBar(
+                    title: const Text('document'),
+                    actions: [
+                      IconButton(
+                          onPressed: () {
+                            Navigator.pushNamed(
+                                context, PageRoutes.settings);
+                          },
+                          icon: const Icon(Icons.more_vert))
+                    ],
+                  )));
+        }),
+        Positioned(
+            bottom: 0,
+            left: 0,
+            right: 0,
+            child: AnimatedOpacity(
+                opacity: _fullScreen ? 0.0 : 1.0,
+                duration: const Duration(milliseconds: 200),
+                child: Container(
+                  height: 60,
+                  color: Colors.blueGrey,
+                ))),
+      ],
+    ),);
+  }
+}

+ 59 - 0
lib/widgets/page/setting_page_widget.dart

@@ -0,0 +1,59 @@
+import 'package:flutter/material.dart';
+import 'package:kmpdfkit_demo/widgets/function/pdf_page_turning_widget.dart';
+
+class SettingPageWidget extends StatefulWidget {
+  const SettingPageWidget({Key? key}) : super(key: key);
+
+  @override
+  State<SettingPageWidget> createState() => _SettingPageWidgetState();
+}
+
+class _SettingPageWidgetState extends State<SettingPageWidget> {
+  bool _showPageTurning = false;
+
+  @override
+  Widget build(BuildContext context) {
+
+    return Scaffold(
+      appBar: AppBar(
+        title: const Text('Settings'),
+      ),
+      body: Builder(builder: (context){
+        return Container(
+          color: Colors.white,
+          padding: const EdgeInsets.symmetric(horizontal: 8),
+          child: Column(
+            children: [
+              item('Page Turning', () {
+                setState(() {
+                  _showPageTurning = !_showPageTurning;
+                });
+              }),
+              AnimatedOpacity(
+                opacity: _showPageTurning ? 1.0 : 0.0,
+                duration: const Duration(milliseconds: 200),
+                child: const PDFPageTurningWidget(),
+              )
+            ],
+          ),
+        );
+      })
+    );
+  }
+
+  Widget item(String title, VoidCallback back) {
+    return Column(
+      children: [
+        ListTile(
+          leading: const Icon(Icons.insert_page_break),
+          title: Text(title),
+          trailing: const Icon(Icons.keyboard_arrow_right),
+          onTap: back,
+        ),
+        const Divider(
+          height: 1,
+        ),
+      ],
+    );
+  }
+}

+ 9 - 0
lib/widgets/page_routes.dart

@@ -0,0 +1,9 @@
+
+
+class PageRoutes{
+
+  static const home = 'home';
+
+  static const settings = '/settings';
+
+}

+ 1 - 1
linux/CMakeLists.txt

@@ -7,7 +7,7 @@ project(runner LANGUAGES CXX)
 set(BINARY_NAME "kmpdfkit_demo")
 # The unique GTK application identifier for this application. See:
 # https://wiki.gnome.org/HowDoI/ChooseApplicationID
-set(APPLICATION_ID "com.compdfkit.pdfviewer.flutter.kmpdfkit_demo")
+set(APPLICATION_ID "com.compdfkit.pdfviewer.flutter")
 
 # Explicitly opt in to modern CMake behaviors to avoid warnings with recent
 # versions of CMake.

+ 1 - 1
macos/Runner/Configs/AppInfo.xcconfig

@@ -8,7 +8,7 @@
 PRODUCT_NAME = kmpdfkit_demo
 
 // The application's bundle identifier
-PRODUCT_BUNDLE_IDENTIFIER = com.compdfkit.pdfviewer.flutter.kmpdfkitDemo
+PRODUCT_BUNDLE_IDENTIFIER = com.compdfkit.pdfviewer.flutter
 
 // The copyright displayed in application information
 PRODUCT_COPYRIGHT = Copyright © 2023 com.compdfkit.pdfviewer.flutter. All rights reserved.

+ 1 - 28
pubspec.yaml

@@ -40,6 +40,7 @@ dependencies:
   # open_file: ^3.2.1
   permission_handler: ^10.2.0
 
+
 dev_dependencies:
   flutter_test:
     sdk: flutter
@@ -62,33 +63,5 @@ flutter:
   # the material Icons class.
   uses-material-design: true
 
-  # To add assets to your application, add an assets section, like this:
-  # assets:
-  #   - images/a_dot_burr.jpeg
-  #   - images/a_dot_ham.jpeg
-
-  # An image asset can refer to one or more resolution-specific "variants", see
-  # https://flutter.dev/assets-and-images/#resolution-aware
 
-  # For details regarding adding assets from package dependencies, see
-  # https://flutter.dev/assets-and-images/#from-packages
 
-  # To add custom fonts to your application, add a fonts section here,
-  # in this "flutter" section. Each entry in this list should have a
-  # "family" key with the font family name, and a "fonts" key with a
-  # list giving the asset and other descriptors for the font. For
-  # example:
-  # fonts:
-  #   - family: Schyler
-  #     fonts:
-  #       - asset: fonts/Schyler-Regular.ttf
-  #       - asset: fonts/Schyler-Italic.ttf
-  #         style: italic
-  #   - family: Trajan Pro
-  #     fonts:
-  #       - asset: fonts/TrajanPro.ttf
-  #       - asset: fonts/TrajanPro_Bold.ttf
-  #         weight: 700
-  #
-  # For details regarding fonts from package dependencies,
-  # see https://flutter.dev/custom-fonts/#from-packages