|
@@ -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});
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|