瀏覽代碼

ComPDFKit(flutter) - 1.调整部分接口UI

liuxiaolong 1 年之前
父節點
當前提交
72600bd93f

+ 18 - 1
example/lib/main.dart

@@ -1,3 +1,4 @@
+import 'package:compdfkit_flutter/compdfkit.dart';
 import 'package:compdfkit_flutter/theme/themes.dart';
 import 'package:compdfkit_flutter_example/widgets/cpdf_readerview_page.dart';
 
@@ -16,9 +17,22 @@ class MyApp extends StatefulWidget {
 }
 
 class _MyAppState extends State<MyApp> {
+
+  String _version = '';
+
   @override
   void initState() {
     super.initState();
+    _init();
+  }
+
+  void _init() async {
+    ComPDFKit comPDFKit = ComPDFKit();
+    comPDFKit.init('rgFNqsZykKZ9g+uUEl59uYolfyQQha7hfKF3ojzs41pP3PBGfzPS/9CMwsBkJsqNBfULy7kBiUGXelugMdloJ+DWqE5Zjt4+xP6t2paXuFOPX/uXy6G/9vZkuEGSIFfBpUzrCgcXs4xxh8k5+sAfW+EA7DvUgt7u0CcPRyqr1Jg=', 'mG0c3O3Mzeu5dkZJW3gpqiAYrD3HuVAh2a+2rjOsIRhyTBaXPgPRGke3LtDII3XZqZRGhToxzSR51pXlzib4f0WpLOaOv47bs7x+UqfQzn9hrp9sGpqfp0B228KI+IMTu4aGVjtYuk+Uxs/kosIBwyVLBY93oKLBB8UJg4t07605BGbaBKUlDopA0iGq1HSncUNNe38VRnoTm6ibgXyIGz5dhD0tvZsf2Vt2my9XP/2scnSpUeS12jwHQXiCsaaK/oKTJGcYKLPGdXenrzHolQ==');
+    String ver = await comPDFKit.getVersionCode();
+    setState(() {
+      _version = ver;
+    });
   }
 
   @override
@@ -27,7 +41,10 @@ class _MyAppState extends State<MyApp> {
       themeMode: ThemeMode.system,
       theme: comPDFKitLightTheme,
       darkTheme: comPDFKitDarkTheme,
-      home: const Scaffold(body: CPDFReaderViewPage()),
+      home:  Scaffold(body: Stack(children: [
+        CPDFReaderViewPage(),
+        Positioned(child: Padding(padding: EdgeInsets.only(top: 100, left: 20), child: Text(_version)))
+      ],)),
     );
   }
 }

+ 19 - 7
example/lib/widgets/cpdf_readerview_page.dart

@@ -1,8 +1,8 @@
 import 'package:compdfkit_flutter/core/cpdf_view_ctrl.dart';
 import 'package:compdfkit_flutter/cpdf_configuration.dart';
-import 'package:compdfkit_flutter/widgets/common/views/pdfview/cpdf_page_indicator.dart';
-import 'package:compdfkit_flutter/widgets/common/views/pdfview/cpdf_page_slider_bar.dart';
-import 'package:compdfkit_flutter/widgets/common/views/pdfview/cpdf_reader_widget.dart';
+import 'package:compdfkit_flutter/tools/common/views/pdfview/cpdf_page_indicator.dart';
+import 'package:compdfkit_flutter/tools/common/views/pdfview/cpdf_page_slider_bar.dart';
+import 'package:compdfkit_flutter/tools/common/views/pdfview/cpdf_reader_widget.dart';
 import 'package:flutter/material.dart';
 
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -33,6 +33,7 @@ class _CPDFReaderViewPageState extends State<CPDFReaderViewPage> {
           onComPDFKitWidgetCreate: (ctrl) {
             setState(() {
               this.ctrl = ctrl;
+              // setReaderViewCallback();
             });
           },
         ),
@@ -41,11 +42,22 @@ class _CPDFReaderViewPageState extends State<CPDFReaderViewPage> {
               bottom: 20,
               child: CPDFPageIndicator(ctrl: ctrl!))
         },
-        Positioned(
-           top:35,
-            right: 2,
-            child: CPDFSliderBar())
+        // Positioned(
+        //    top:100,
+        //     right: 100,
+        //     child: CPDFSliderBar())
       ],
     );
   }
+
+  // void setReaderViewCallback() {
+  //   ctrl!.setReaderViewCallback(
+  //       onMoveToChild: (pageIndex) {
+  //         setState(() {
+  //           _currentPage = pageIndex;
+  //         });
+  //       },
+  //       onScrollEnd: () {},
+  //       onRecordLastJumpPageNum: (pageIndex) {});
+  // }
 }

+ 2 - 1
example/pubspec.yaml

@@ -30,7 +30,6 @@ dependencies:
   cupertino_icons: ^1.0.2
 #  file_picker: ^5.2.5
 
-
 dev_dependencies:
   integration_test:
     sdk: flutter
@@ -54,6 +53,8 @@ flutter:
   # included with your application, so that you can use the icons in
   # the material Icons class.
   uses-material-design: true
+  assets:
+    - assets/images/
   # To add assets to your application, add an assets section, like this:
   # assets:
   #   - images/a_dot_burr.jpeg

lib/widgets/common/views/dialog/cpdf_base_input_dialog_widget.dart → lib/tools/common/views/dialog/cpdf_base_input_dialog_widget.dart


lib/widgets/common/views/pdfview/cpdf_page_indicator.dart → lib/tools/common/views/pdfview/cpdf_page_indicator.dart


+ 104 - 0
lib/tools/common/views/pdfview/cpdf_page_slider_bar.dart

@@ -0,0 +1,104 @@
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+
+import '../../widgets/cpdf_image_slider_thumb_shape.dart';
+import 'dart:ui' as ui;
+
+///  Copyright © 2014-2023 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 CPDFSliderBar extends StatefulWidget {
+  double sliderBarWidth;
+  double sliderBarHeight;
+  String sliderBarImagePath;
+  double maxValue;
+  double value;
+
+  CPDFSliderBar(
+      {required this.value,
+      required this.maxValue,
+      this.sliderBarWidth = 24,
+      this.sliderBarHeight = 36,
+      this.sliderBarImagePath =
+          'packages/compdfkit_flutter/assets/images/ic_slider_bar.png',
+      super.key});
+
+  @override
+  State<CPDFSliderBar> createState() => _CPDFSliderBarState();
+}
+
+class _CPDFSliderBarState extends State<CPDFSliderBar> {
+  double _value = 0;
+  late ui.Image image;
+
+  @override
+  void initState() {
+    super.initState();
+    _initImage();
+    _value = widget.value;
+  }
+
+  void _initImage() async {
+    final data = await rootBundle.load(widget.sliderBarImagePath);
+    final bytes = data.buffer.asUint8List();
+    final image1 = await decodeImageFromList(bytes);
+    setState(() {
+      image = image1;
+    });
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return RotatedBox(
+        quarterTurns: 1,
+        child: SliderTheme(
+          data: SliderTheme.of(context).copyWith(
+            trackHeight: 10,
+            thumbShape: CPDFImageSliderThumbShape(
+                image: image,
+                imageWidth: widget.sliderBarWidth,
+                imageHeight: widget.sliderBarHeight),
+            thumbColor: Colors.white,
+          ),
+          child: Slider(
+            value: _value,
+            min: 0,
+            max: widget.maxValue,
+            onChanged: (v) {
+              setState(() {
+                _value = v;
+              });
+            },
+          ),
+        ));
+    // return Container(
+    //   width: 120,
+    //   height: 36,
+    //   constraints: const BoxConstraints(
+    //     minWidth: 120,
+    //     minHeight: 36
+    //   ),
+    //   color: Colors.blue,
+    //   child: Stack(
+    //   children: [
+    //     Positioned(
+    //       right: 0,
+    //       child: widget.sliderBar?? _normalSliderBar(),
+    //     )
+    //   ],
+    // ),);
+  }
+
+  Widget _normalSliderBar() {
+    return Image.asset(
+      'assets/images/ic_slider_bar.png',
+      package: 'compdfkit_flutter',
+      width: 24,
+      height: 36,
+    );
+  }
+}

lib/widgets/common/views/pdfview/cpdf_reader_widget.dart → lib/tools/common/views/pdfview/cpdf_reader_widget.dart


lib/widgets/common/views/test..dart → lib/tools/common/views/test..dart


+ 68 - 0
lib/tools/common/widgets/cpdf_image_slider_thumb_shape.dart

@@ -0,0 +1,68 @@
+import 'package:flutter/material.dart';
+
+import 'package:flutter/services.dart';
+import 'dart:ui' as ui;
+
+///  Copyright © 2014-2023 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 CPDFImageSliderThumbShape extends SliderComponentShape {
+  final double imageWidth;
+  final double imageHeight;
+  final ui.Image image;
+
+  CPDFImageSliderThumbShape({
+    this.imageWidth = 20,
+    this.imageHeight = 20,
+    required this.image,
+  });
+
+  @override
+  Size getPreferredSize(bool isEnabled, bool isDiscrete) {
+    return Size(imageWidth, imageHeight);
+  }
+
+  @override
+  void paint(
+    PaintingContext context,
+    Offset center, {
+    Animation<double>? activationAnimation,
+    Animation<double>? enableAnimation,
+    bool? isDiscrete,
+    TextPainter? labelPainter,
+    RenderBox? parentBox,
+    SliderThemeData? sliderTheme,
+    TextDirection? textDirection,
+    double? value,
+    double? textScaleFactor,
+    Size? sizeWithOverflow,
+  })  {
+    final canvas = context.canvas;
+    final imageOffset =
+        Offset(center.dx - imageWidth / 2, center.dy - imageHeight / 2);
+
+    // 计算缩放比例
+    final double targetWidth = imageWidth; // 目标宽度
+    final double targetHeight = imageHeight; // 目标高度
+    final double scaleX = targetWidth / image.width.toDouble();
+    final double scaleY = targetHeight / image.height.toDouble();
+    final double scale = scaleX < scaleY ? scaleX : scaleY;
+
+    // 计算缩放后的图片尺寸
+    final double destWidth = image.width.toDouble() * scale;
+    final double destHeight = image.height.toDouble() * scale;
+    // canvas.translate(imageOffset.dx, imageOffset.dy);
+    // canvas.rotate(1.6);
+
+    // 绘制图片,并指定位置和大小
+    final paint = Paint();
+    final srcRect = Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble());
+    final dstRect = Rect.fromLTWH(imageOffset.dx, imageOffset.dy, destWidth, destHeight);
+
+    canvas.drawImageRect(image, srcRect, dstRect, paint);
+  }
+}

+ 0 - 45
lib/widgets/common/views/pdfview/cpdf_page_slider_bar.dart

@@ -1,45 +0,0 @@
-import 'package:flutter/material.dart';
-
-///  Copyright © 2014-2023 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 CPDFSliderBar extends StatefulWidget {
-  Widget? sliderBar;
-
-  CPDFSliderBar({this.sliderBar, super.key});
-
-  @override
-  State<CPDFSliderBar> createState() => _CPDFSliderBarState();
-}
-
-class _CPDFSliderBarState extends State<CPDFSliderBar> {
-  @override
-  Widget build(BuildContext context) {
-    return Placeholder();
-    // return Slider(value: 50, onChanged: (v){},);
-    // return Container(
-    //   width: 100,
-    //   height: 36,
-    //   color: Colors.blue,
-    //   child: Stack(
-    //   children: [
-    //     Positioned(
-    //       right: 0,
-    //       child: widget.sliderBar?? _normalSliderBar(),
-    //     )
-    //   ],
-    // ),);
-  }
-
-  Widget _normalSliderBar(){
-    return Image.asset(
-      'assets/images/ic_slider_bar.png',
-      package: 'compdfkit_flutter',
-      width: 24, height: 36,
-    );
-  }
-}