compdfkit_widget.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import 'dart:io';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/gestures.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:flutter/rendering.dart';
  6. import 'package:flutter/services.dart';
  7. import 'package:kmpdfkit_demo/widgets/contains.dart';
  8. ///
  9. /// compdfkit_widget.dart
  10. ///
  11. /// Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  12. ///
  13. /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  14. /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  15. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  16. /// This notice may not be removed from this file.
  17. typedef ComPDFKitWidgetCreateCallback = void Function();
  18. class ComPDFKitWidget extends StatefulWidget {
  19. final String? documentPath;
  20. final dynamic configuration;
  21. final ComPDFKitWidgetCreateCallback? onComPDFKitWidgetCreate;
  22. const ComPDFKitWidget(
  23. {Key? key,
  24. this.documentPath,
  25. this.configuration,
  26. this.onComPDFKitWidgetCreate})
  27. : super(key: key);
  28. @override
  29. State<ComPDFKitWidget> createState() => _ComPDFKitWidgetState();
  30. }
  31. class _ComPDFKitWidgetState extends State<ComPDFKitWidget> {
  32. @override
  33. Widget build(BuildContext context) {
  34. const String viewType = ChannelNames.comPDFKitViewType;
  35. final Map<String, dynamic> creationParams = <String, dynamic>{
  36. 'document': widget.documentPath,
  37. 'configuration': widget.configuration
  38. };
  39. if (Platform.isAndroid) {
  40. return PlatformViewLink(
  41. surfaceFactory:
  42. (BuildContext context, PlatformViewController controller) {
  43. return AndroidViewSurface(
  44. controller: controller as AndroidViewController,
  45. hitTestBehavior: PlatformViewHitTestBehavior.opaque,
  46. gestureRecognizers: const <
  47. Factory<OneSequenceGestureRecognizer>>{});
  48. },
  49. onCreatePlatformView: (PlatformViewCreationParams params) {
  50. return PlatformViewsService.initSurfaceAndroidView(
  51. id: params.id,
  52. viewType: viewType,
  53. creationParams: creationParams,
  54. creationParamsCodec: const StandardMessageCodec(),
  55. layoutDirection: TextDirection.ltr)
  56. ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
  57. ..addOnPlatformViewCreatedListener(onPlatformViewCreated)
  58. ..create();
  59. },
  60. viewType: viewType);
  61. } else if (Platform.isIOS) {
  62. return UiKitView(
  63. viewType: viewType,
  64. layoutDirection: TextDirection.ltr,
  65. hitTestBehavior: PlatformViewHitTestBehavior.opaque,
  66. creationParams: creationParams,
  67. creationParamsCodec: const StandardMessageCodec(),
  68. onPlatformViewCreated: (id) {
  69. onPlatformViewCreated(id);
  70. },
  71. );
  72. } else {
  73. return const Center(child: Text('demo only support android and ios'));
  74. }
  75. }
  76. Future<void> onPlatformViewCreated(int id) async {
  77. if (widget.onComPDFKitWidgetCreate != null) {
  78. widget.onComPDFKitWidgetCreate!();
  79. }
  80. }
  81. }