cpdf_reader_widget.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // Copyright © 2014-2024 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. class CPDFReaderWidget extends StatefulWidget {
  19. /// pdf file path
  20. final String document;
  21. final String? password;
  22. /// init ComPDFKit SDK configuration
  23. final CPDFConfiguration configuration;
  24. final CPDFReaderWidgetCreatedCallback onCreated;
  25. final CPDFPageChangedCallback? onPageChanged;
  26. /// init callback
  27. const CPDFReaderWidget(
  28. {Key? key,
  29. required this.document,
  30. this.password = '',
  31. required this.configuration,
  32. required this.onCreated,
  33. this.onPageChanged})
  34. : super(key: key);
  35. @override
  36. State<CPDFReaderWidget> createState() => _CPDFReaderWidgetState();
  37. }
  38. class _CPDFReaderWidgetState extends State<CPDFReaderWidget> {
  39. @override
  40. Widget build(BuildContext context) {
  41. const String viewType = 'com.compdfkit.flutter.ui.pdfviewer';
  42. final Map<String, dynamic> creationParams = <String, dynamic>{
  43. 'document': widget.document,
  44. 'password': widget.password,
  45. 'configuration': widget.configuration.toJson()
  46. };
  47. if (Platform.isAndroid) {
  48. return PlatformViewLink(
  49. surfaceFactory:
  50. (BuildContext context, PlatformViewController controller) {
  51. return AndroidViewSurface(
  52. controller: controller as AndroidViewController,
  53. hitTestBehavior: PlatformViewHitTestBehavior.opaque,
  54. gestureRecognizers: const <Factory<
  55. OneSequenceGestureRecognizer>>{});
  56. },
  57. onCreatePlatformView: (PlatformViewCreationParams params) {
  58. return PlatformViewsService.initSurfaceAndroidView(
  59. id: params.id,
  60. viewType: viewType,
  61. creationParams: creationParams,
  62. creationParamsCodec: const StandardMessageCodec(),
  63. layoutDirection: TextDirection.ltr)
  64. ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
  65. ..addOnPlatformViewCreatedListener(_onPlatformViewCreated)
  66. ..create();
  67. },
  68. viewType: viewType);
  69. } else if (Platform.isIOS) {
  70. return UiKitView(
  71. viewType: viewType,
  72. layoutDirection: TextDirection.ltr,
  73. hitTestBehavior: PlatformViewHitTestBehavior.opaque,
  74. creationParams: creationParams,
  75. creationParamsCodec: const StandardMessageCodec(),
  76. onPlatformViewCreated: (id) {
  77. _onPlatformViewCreated(id);
  78. },
  79. );
  80. } else {
  81. return const Center(child: Text('only support android and ios'));
  82. }
  83. }
  84. Future<void> _onPlatformViewCreated(int id) async {
  85. debugPrint('ComPDFKit-Flutter: CPDFReaderWidget created');
  86. widget.onCreated(CPDFReaderWidgetController(id, onPageChanged: widget.onPageChanged));
  87. }
  88. }