소스 검색

ComPDFKit(flutter) - 修复Android端Widget 退出时,文档未保存问题

ComPDFKit-Youna 9 달 전
부모
커밋
9e23576332

+ 2 - 1
android/build.gradle

@@ -19,6 +19,7 @@ rootProject.allprojects {
         maven {
             url 'https://s01.oss.sonatype.org/content/repositories/snapshots/'
         }
+        mavenLocal()
     }
 }
 
@@ -43,7 +44,7 @@ android {
         implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
         api 'com.compdf:compdfkit:2.0.1'
         api 'com.compdf:compdfkit-ui:2.0.1'
-        api 'com.compdf:compdfkit-tools:2.0.1'
+        api 'com.compdf:compdfkit-tools:2.0.2-SNAPSHOT'
         testImplementation 'junit:junit:4.13.2'
         testImplementation 'org.mockito:mockito-core:5.0.0'
         api 'com.github.bumptech.glide:glide:4.15.1'

+ 27 - 12
android/src/main/java/com/compdfkit/flutter/compdfkit_flutter/platformview/CPDFViewCtrlFlutter.java

@@ -55,8 +55,8 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
         Log.e(LOG_TAG, "CPDFViewCtrlFlutter:Create CPDFDocumentFragment");
         initCPDFViewCtrl(context, creationParams);
 
-        String channelName = "com.compdfkit.flutter.ui.pdfviewer."+ viewId;
-        Log.e(LOG_TAG, "CPDFViewCtrlFlutter: create MethodChannel:"+ channelName);
+        String channelName = "com.compdfkit.flutter.ui.pdfviewer." + viewId;
+        Log.e(LOG_TAG, "CPDFViewCtrlFlutter: create MethodChannel:" + channelName);
         methodChannel = new MethodChannel(binaryMessenger, channelName);
         methodChannel.setMethodCallHandler(this);
     }
@@ -75,6 +75,7 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
         fragmentContainerView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
             @Override
             public void onViewAttachedToWindow(@NonNull View v) {
+                Log.e(LOG_TAG, "CPDFViewCtrlFlutter: Attached CPDFDocumentFragment to window");
                 FragmentActivity fragmentActivity = getFragmentActivity(context);
                 if (fragmentActivity != null) {
                     fragmentActivity.getSupportFragmentManager()
@@ -87,18 +88,31 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
 
             @Override
             public void onViewDetachedFromWindow(@NonNull View v) {
-                FragmentActivity fragmentActivity = getFragmentActivity(context);
-                if (fragmentActivity != null) {
-                    fragmentActivity.getSupportFragmentManager()
-                            .beginTransaction()
-                            .remove(documentFragment)
-                            .setReorderingAllowed(true)
-                            .commit();
-                }
+                documentFragment.pdfView.savePDF((s, uri) -> {
+                    Log.e(LOG_TAG, "CPDFViewCtrlFlutter: pdfView.savePDF Success");
+                    detachedFragment(context);
+                }, e -> {
+                    Log.e(LOG_TAG, "CPDFViewCtrlFlutter: pdfView.savePDF Fail");
+                    e.printStackTrace();
+                    detachedFragment(context);
+                });
+
             }
         });
     }
 
+    private void detachedFragment(Context context){
+        Log.e(LOG_TAG, "CPDFViewCtrlFlutter: Detached CPDFDocumentFragment from window");
+        FragmentActivity fragmentActivity = getFragmentActivity(context);
+        if (fragmentActivity != null) {
+            fragmentActivity.getSupportFragmentManager()
+                    .beginTransaction()
+                    .remove(documentFragment)
+                    .setReorderingAllowed(true)
+                    .commit();
+        }
+    }
+
     @Nullable
     @Override
     public View getView() {
@@ -117,7 +131,8 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
 
     @Override
     public void dispose() {
-       fragmentContainerView = null;
+        Log.e(LOG_TAG, "CPDFViewCtrlFlutter: dispose()");
+        fragmentContainerView = null;
     }
 
     @Override
@@ -131,7 +146,7 @@ public class CPDFViewCtrlFlutter implements PlatformView, MethodChannel.MethodCa
     }
 
     private FragmentActivity getFragmentActivity(Context context) {
-        if (context instanceof FragmentActivity){
+        if (context instanceof FragmentActivity) {
             return (FragmentActivity) context;
         } else if (context instanceof MutableContextWrapper) {
             return getFragmentActivity(((MutableContextWrapper) context).getBaseContext());

example/lib/features.dart → example/lib/cpdf_fun_item.dart


+ 6 - 6
example/lib/page/pdf/pdf_page.dart

@@ -13,28 +13,28 @@ import 'package:compdfkit_flutter/widgets/cpdf_reader_widget.dart';
 import 'package:flutter/material.dart';
 
 
-class PDFDocumentPage extends StatefulWidget {
+class CPDFReaderWidgetExample extends StatefulWidget {
   final String documentPath;
 
-  const PDFDocumentPage({super.key, required this.documentPath});
+  const CPDFReaderWidgetExample({super.key, required this.documentPath});
 
   @override
-  State<PDFDocumentPage> createState() => _PDFDocumentPageState();
+  State<CPDFReaderWidgetExample> createState() => _CPDFReaderWidgetExampleState();
 }
 
-class _PDFDocumentPageState extends State<PDFDocumentPage> {
+class _CPDFReaderWidgetExampleState extends State<CPDFReaderWidgetExample> {
   @override
   Widget build(BuildContext context) {
     return Scaffold(
         resizeToAvoidBottomInset: false,
         appBar: AppBar(
-          title: const Text('CPDFReaderWidget'),
+          title: const Text('CPDFReaderWidgetExample'),
         ),
         body: CPDFReaderWidget(
           document: widget.documentPath,
           configuration: CPDFConfiguration(
               globalConfig:
-                  const CPDFGlobalConfig(themeMode: CPDFThemeMode.dark)),
+                  const CPDFGlobalConfig(themeMode: CPDFThemeMode.light)),
           onCreated: (controller) {},
         ));
   }

+ 6 - 6
example/lib/main.dart

@@ -11,9 +11,7 @@ import 'dart:io';
 
 import 'package:compdfkit_flutter/compdfkit.dart';
 import 'package:compdfkit_flutter/cpdf_configuration.dart';
-import 'package:compdfkit_flutter/cpdf_options.dart';
-import 'package:compdfkit_flutter_example/features.dart';
-import 'package:compdfkit_flutter_example/page/pdf/pdf_page.dart';
+import 'package:compdfkit_flutter_example/cpdf_reader_widget_example.dart';
 import 'package:compdfkit_flutter_example/page/settings_page.dart';
 import 'package:compdfkit_flutter_example/theme/themes.dart';
 import 'package:compdfkit_flutter_example/utils/file_util.dart';
@@ -22,6 +20,8 @@ import 'package:file_picker/file_picker.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_svg/svg.dart';
 
+import 'cpdf_fun_item.dart';
+
 const String DOCUMENT_PATH = 'pdfs/PDF_Document.pdf';
 
 void main() {
@@ -85,9 +85,9 @@ class _HomePageState extends State<HomePage> {
   }
 
   void showCPDFReaderWidget() async {
-    File document = await extractAsset(context, DOCUMENT_PATH);
+    File document = await extractAsset(context, DOCUMENT_PATH, shouldOverwrite: false);
     Navigator.push(context, MaterialPageRoute(builder: (context) {
-      return PDFDocumentPage(documentPath: document.path);
+      return CPDFReaderWidgetExample(documentPath: document.path);
     }));
   }
 
@@ -96,7 +96,7 @@ class _HomePageState extends State<HomePage> {
     final exampleList = <Widget>[
       Text(
         'Modal View Examples',
-        style: Theme.of(context).textTheme.bodyLarge,
+        style: Theme.of(context).textTheme.bodyMedium,
       ),
       FeatureItem(
           title: 'Basic Example',

+ 0 - 30
example/lib/module/compdfkit_locale.dart

@@ -1,30 +0,0 @@
-import 'package:flutter/material.dart';
-
-///  Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
-///
-///  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
-///  AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
-///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
-///  This notice may not be removed from this file.
-///
-
-class ComPDFKitLocale extends ChangeNotifier {
-  Locale _locale = const Locale('en', 'US');
-
-  Locale get value => _locale;
-
-  void setLocale(String localeString) {
-    List<String> parts = localeString.split('_');
-    String languageCode = parts[0];
-    String scriptCode = parts.length > 1 ? parts[1] : '';
-    Locale locale;
-    if (scriptCode.isNotEmpty) {
-      locale = Locale.fromSubtags(
-          languageCode: languageCode, scriptCode: scriptCode);
-    } else {
-      locale = Locale(languageCode);
-    }
-    _locale = locale;
-    notifyListeners();
-  }
-}

+ 6 - 1
lib/util/extension/cpdf_color_extension.dart

@@ -11,14 +11,19 @@ import 'dart:ui';
 
 import 'package:flutter/material.dart';
 
-
+/// extension [Color] class
+/// toHex: Colors.white.toHex() => '#FFFFFFFF'
+/// formHex: '#FFFFFF' => Colors.white
 extension HexColor on Color{
+
+  /// Colors.white.toHex() => '#FFFFFFFF'
   String toHex({bool leadingHashSign = true}) => '${leadingHashSign ? '#' : ''}'
       '${alpha.toRadixString(16).padLeft(2, '0')}'
       '${red.toRadixString(16).padLeft(2, '0')}'
       '${green.toRadixString(16).padLeft(2, '0')}'
       '${blue.toRadixString(16).padLeft(2, '0')}';
 
+  /// formHex: '#FFFFFF' => Colors.white
   static Color fromHex(String hexString) {
     final buffer = StringBuffer();
     if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');

+ 1 - 1
lib/widgets/cpdf_reader_widget.dart

@@ -15,7 +15,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter/services.dart';
 
-typedef void CPDFReaderWidgetCreatedCallback(
+typedef CPDFReaderWidgetCreatedCallback = void Function(
     CPDFReaderWidgetController controller);
 
 class CPDFReaderWidget extends StatefulWidget {