cpdf_page_indicator.dart 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import 'package:compdfkit_flutter/core/cpdf_view_ctrl.dart';
  2. import 'package:flutter/material.dart';
  3. import '../dialog/cpdf_base_input_dialog_widget.dart';
  4. /// Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  5. ///
  6. /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  7. /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  8. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  9. /// This notice may not be removed from this file.
  10. class CPDFPageIndicator extends StatefulWidget {
  11. final CPDFViewCtrl ctrl;
  12. Decoration? decoration;
  13. TextStyle? textStyle;
  14. CPDFPageIndicator(
  15. {required this.ctrl, this.decoration, this.textStyle, super.key}) {
  16. decoration ??= const BoxDecoration(
  17. color: Color(0xCC000000),
  18. borderRadius: BorderRadius.all(Radius.circular(2)));
  19. textStyle ??= const TextStyle(color: Colors.white);
  20. }
  21. @override
  22. State<CPDFPageIndicator> createState() => _CPDFPageIndicatorState();
  23. }
  24. class _CPDFPageIndicatorState extends State<CPDFPageIndicator> {
  25. int _pageCount = 0;
  26. @override
  27. void initState() {
  28. super.initState();
  29. _initDocumentData();
  30. }
  31. void _initDocumentData() async {
  32. widget.ctrl.document.getPageCount().then((value) {
  33. setState(() {
  34. _pageCount = value;
  35. });
  36. });
  37. }
  38. @override
  39. Widget build(BuildContext context) {
  40. return GestureDetector(
  41. child: Container(
  42. decoration: widget.decoration,
  43. padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
  44. child: Row(
  45. mainAxisAlignment: MainAxisAlignment.center,
  46. mainAxisSize: MainAxisSize.min,
  47. children: [
  48. StreamBuilder(
  49. initialData: 1,
  50. stream: widget.ctrl.currentPageIndexStream.stream,
  51. builder: (context, pageIndex) {
  52. return Text((pageIndex.data! + 1).toString(),
  53. style: widget.textStyle);
  54. }),
  55. Text('/', style: widget.textStyle),
  56. Text(_pageCount.toString(), style: widget.textStyle)
  57. ],
  58. ),
  59. ),
  60. onTap: () async {
  61. int? jumpPageIndex = await showDialog<int?>(
  62. context: context,
  63. builder: (BuildContext context) {
  64. return CPDFPageNavigationWidget(
  65. pageCount: _pageCount,
  66. hintText: 'Page (1/$_pageCount)',
  67. );
  68. });
  69. if (jumpPageIndex != null) {
  70. widget.ctrl.setDisplayPageIndex(jumpPageIndex);
  71. }
  72. },
  73. );
  74. }
  75. }