main.dart 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. ///
  2. /// Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
  3. ///
  4. /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  5. /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  6. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  7. /// This notice may not be removed from this file.
  8. ///
  9. import 'dart:io';
  10. import 'package:compdfkit_flutter/compdfkit.dart';
  11. import 'package:compdfkit_flutter/cpdf_configuration.dart';
  12. import 'package:compdfkit_flutter_example/cpdf_reader_widget_example.dart';
  13. import 'package:compdfkit_flutter_example/page/settings_page.dart';
  14. import 'package:compdfkit_flutter_example/theme/themes.dart';
  15. import 'package:compdfkit_flutter_example/utils/file_util.dart';
  16. import 'package:file_picker/file_picker.dart';
  17. import 'package:flutter/material.dart';
  18. import 'package:flutter_svg/svg.dart';
  19. import 'cpdf_fun_item.dart';
  20. const String DOCUMENT_PATH = 'pdfs/PDF_Document.pdf';
  21. void main() {
  22. runApp(const MyApp());
  23. }
  24. class MyApp extends StatelessWidget {
  25. const MyApp({super.key});
  26. @override
  27. Widget build(BuildContext context) {
  28. return MaterialApp(
  29. title: 'ComPDFKit SDK for Flutter',
  30. theme: lightTheme,
  31. darkTheme: darkTheme,
  32. themeMode: ThemeMode.system,
  33. home: const HomePage(),
  34. );
  35. }
  36. }
  37. class HomePage extends StatefulWidget {
  38. const HomePage({super.key});
  39. @override
  40. State<HomePage> createState() => _HomePageState();
  41. }
  42. class _HomePageState extends State<HomePage> {
  43. @override
  44. void initState() {
  45. super.initState();
  46. _init();
  47. }
  48. void _init() async {
  49. // online license auth
  50. // Please replace it with your ComPDFKit license
  51. // ComPDFKit.initialize(androidOnlineLicense: 'IVTAsbJCW0X45qIy5cTEuzxZzKpYIpJe6WPY7uCPIiI=',iosOnlineLicense: 'lkw3Gr0HuD5pV1/+DVRSxp7qBlvK+Izo3mOKyAEHXz4=');
  52. // offline license auth
  53. ComPDFKit.init(
  54. '77/0LbrlNGNUEKWCmu4/iG3ZlSv4+47zdgsGOxDX3vGx64O2BtvxJyDzgqNvAmqU8eM0G0ALjeYHtV3vrL7mNtev5BHDGmg2ye3WigSqpN8y0gOPPutXKAQyW9vM+cC81ws4sjcXt2vphQXKjRGeVnQodoe+0FbKzffywJ2DORo32GO9qJ51qIKGmXhokKOuQIDJ2eDgQDkIwUChC+yVz088AjTSDSYOe0UobLHOpkP6Ou4qbkx6pKJ+WexOqFxIb90cAQVVa02NpLJdSu8VPIDJNzuwds1y2RLVD6lgBj8Zez+CGDL4JzeYnYhQhlOZNLXJQ4ZqkN/eHcvgIlpzL2u0lH1oY17eVN2TRW5amzqOuoo5orgnAvMGFLdEwMLlC+K5dn2h1bB4RjP9ZTqgoNaGtyKiQ+FhqHLgPV+faNMUdCBlrq4FNafN5ZoZwbHn4fzUh88DO0481O/H5F0zHak/PQJR7Gu1OfN94Q2uALpL4t3i0S76cdEeJ6wRw44AH0PQikF7jWqqmAB1bqcqsgePNE97RigZwYiDA0p2AGWxhBg2+pgZD9EPOOjdtWPXK9LTAop75OQ9whjDWL1y0LTP/JhOPQIOghNPepj3VtjzSVrUbTBFktXeDGlz0NH9TnbvjZoxJRlcNN1+9x100WEfF4A2XbJZEjcpxV9tk1r9UpDZNXkuRC5cqSCOndk3WcAQjbXfQ4Bb9zwxbcvORsTU9lFmAbRS4KFSnCfN/gMqYb0QzhAKt6Wube1sAVkj4n7AvEss/0SdC9zk5m0/E/c0dDshJ3XKSLU/PaI1wbf/SnQhn+gZICJWg9lWCAi16kSStNvD+Tlg8iXYGXcUT967Gjfe/7Au1tVEU3oE60OBrEnSCSSJJt3MWbr/52CRpTtQ6bC+eZK0ijaRGZnS60G4A4sqfUpH3dRQ0juEnz0zrfyaQi4TKGCC1SzT5YPtsIEy4Stbdh3CCWoYV8SehrEkB58JHrolHhy5cVPV2RRYE30JXG5sJOlwb6wuhHVLlanJ7OE5ewEJCtZIHMkJ/rlfinOunS0G9GL2IMBwsyfOB1Cxl+yXx4V3li2ymawe');
  55. }
  56. void showDocument() async {
  57. File document = await extractAsset(context, DOCUMENT_PATH);
  58. ComPDFKit.openDocument(document.path,
  59. password: '', configuration: CPDFConfiguration());
  60. }
  61. void pickDocument() async {
  62. FilePickerResult? result = await FilePicker.platform.pickFiles(
  63. type: FileType.custom,
  64. allowedExtensions: ['pdf'],
  65. );
  66. if (result != null) {
  67. ComPDFKit.openDocument(result.files.first.path!,
  68. password: '', configuration: CPDFConfiguration());
  69. }
  70. }
  71. void showCPDFReaderWidget() async {
  72. File document = await extractAsset(context, DOCUMENT_PATH, shouldOverwrite: false);
  73. Navigator.push(context, MaterialPageRoute(builder: (context) {
  74. return CPDFReaderWidgetExample(documentPath: document.path);
  75. }));
  76. }
  77. @override
  78. Widget build(BuildContext context) {
  79. final exampleList = <Widget>[
  80. Text(
  81. 'Modal View Examples',
  82. style: Theme.of(context).textTheme.bodyMedium,
  83. ),
  84. FeatureItem(
  85. title: 'Basic Example',
  86. description: 'Open sample pdf document',
  87. onTap: () => showDocument()),
  88. FeatureItem(
  89. title: 'Select External Files',
  90. description: 'Select pdf document from system file manager',
  91. onTap: () => pickDocument()),
  92. FeatureItem(
  93. title: 'Show CPDFReaderWidget',
  94. description: 'Display PDF view in flutter widget',
  95. onTap: () => showCPDFReaderWidget())
  96. ];
  97. return Scaffold(
  98. appBar: const CAppBar(), body: ExampleListView(widgets: exampleList));
  99. }
  100. }
  101. class ExampleListView extends StatelessWidget {
  102. final List<Widget> widgets;
  103. const ExampleListView({super.key, required this.widgets});
  104. @override
  105. Widget build(BuildContext context) {
  106. return Padding(
  107. padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
  108. child: ListView.builder(
  109. itemCount: widgets.length,
  110. itemBuilder: (context, index) {
  111. return widgets[index];
  112. }));
  113. }
  114. }
  115. class CAppBar extends StatelessWidget implements PreferredSizeWidget {
  116. const CAppBar({super.key});
  117. @override
  118. Widget build(BuildContext context) {
  119. return AppBar(
  120. title: const Text('ComPDFKit SDK for Flutter'),
  121. actions: [
  122. IconButton(
  123. padding: const EdgeInsets.all(16),
  124. onPressed: () {
  125. Navigator.push(context, MaterialPageRoute(builder: (context) {
  126. return const SettingsPage();
  127. }));
  128. },
  129. icon: SvgPicture.asset(
  130. 'images/ic_home_setting.svg',
  131. width: 24,
  132. height: 24,
  133. color: Theme.of(context).colorScheme.onPrimary,
  134. ))
  135. ],
  136. );
  137. }
  138. @override
  139. Size get preferredSize => const Size(double.infinity, 56);
  140. }