cpdf_reader_widget.dart 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // Copyright © 2014-2025 PDF Technologies, Inc. All Rights Reserved.
  2. //
  3. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  4. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  5. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  6. // This notice may not be removed from this file.
  7. import 'dart:io';
  8. import 'package:compdfkit_flutter/configuration/cpdf_configuration.dart';
  9. import 'package:compdfkit_flutter/widgets/cpdf_reader_widget_controller.dart';
  10. import 'package:flutter/foundation.dart';
  11. import 'package:flutter/gestures.dart';
  12. import 'package:flutter/material.dart';
  13. import 'package:flutter/rendering.dart';
  14. import 'package:flutter/services.dart';
  15. typedef CPDFReaderWidgetCreatedCallback = void Function(
  16. CPDFReaderWidgetController controller);
  17. typedef CPDFPageChangedCallback = void Function(int pageIndex);
  18. typedef CPDFDocumentSaveCallback = void Function();
  19. class CPDFReaderWidget extends StatefulWidget {
  20. /// pdf file path
  21. final String document;
  22. final String? password;
  23. /// init ComPDFKit SDK configuration
  24. final CPDFConfiguration configuration;
  25. final CPDFReaderWidgetCreatedCallback onCreated;
  26. final CPDFPageChangedCallback? onPageChanged;
  27. final CPDFDocumentSaveCallback? onSaveCallback;
  28. /// init callback
  29. const CPDFReaderWidget(
  30. {Key? key,
  31. required this.document,
  32. this.password = '',
  33. required this.configuration,
  34. required this.onCreated,
  35. this.onPageChanged,
  36. this.onSaveCallback})
  37. : super(key: key);
  38. @override
  39. State<CPDFReaderWidget> createState() => _CPDFReaderWidgetState();
  40. }
  41. class _CPDFReaderWidgetState extends State<CPDFReaderWidget> {
  42. @override
  43. Widget build(BuildContext context) {
  44. const String viewType = 'com.compdfkit.flutter.ui.pdfviewer';
  45. final Map<String, dynamic> creationParams = <String, dynamic>{
  46. 'document': widget.document,
  47. 'password': widget.password,
  48. 'configuration': widget.configuration.toJson()
  49. };
  50. if (Platform.isAndroid) {
  51. return PlatformViewLink(
  52. surfaceFactory:
  53. (BuildContext context, PlatformViewController controller) {
  54. return AndroidViewSurface(
  55. controller: controller as AndroidViewController,
  56. hitTestBehavior: PlatformViewHitTestBehavior.opaque,
  57. gestureRecognizers: const <Factory<
  58. OneSequenceGestureRecognizer>>{});
  59. },
  60. onCreatePlatformView: (PlatformViewCreationParams params) {
  61. return PlatformViewsService.initSurfaceAndroidView(
  62. id: params.id,
  63. viewType: viewType,
  64. creationParams: creationParams,
  65. creationParamsCodec: const StandardMessageCodec(),
  66. layoutDirection: TextDirection.ltr)
  67. ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
  68. ..addOnPlatformViewCreatedListener(_onPlatformViewCreated)
  69. ..create();
  70. },
  71. viewType: viewType);
  72. } else if (Platform.isIOS) {
  73. return UiKitView(
  74. viewType: viewType,
  75. layoutDirection: TextDirection.ltr,
  76. hitTestBehavior: PlatformViewHitTestBehavior.opaque,
  77. creationParams: creationParams,
  78. creationParamsCodec: const StandardMessageCodec(),
  79. onPlatformViewCreated: (id) {
  80. _onPlatformViewCreated(id);
  81. },
  82. );
  83. } else {
  84. return const Center(child: Text('only support android and ios'));
  85. }
  86. }
  87. Future<void> _onPlatformViewCreated(int id) async {
  88. debugPrint('ComPDFKit-Flutter: CPDFReaderWidget created');
  89. widget.onCreated(CPDFReaderWidgetController(id, onPageChanged: widget.onPageChanged, saveCallback : widget.onSaveCallback));
  90. }
  91. }