cpdf_main_tool_bar.dart 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import 'package:compdfkit_flutter/core/cpdf_view_ctrl.dart';
  2. import 'package:compdfkit_flutter/theme/colors.dart';
  3. import 'package:compdfkit_flutter/theme/themes.dart';
  4. import 'package:compdfkit_flutter/widgets/viewer/pdfbota/cpdf_bota_page.dart';
  5. import 'package:flutter/material.dart';
  6. import '../../viewer/pdfbota/pdfthumbnail/cpdf_thumbnail_page.dart';
  7. /// Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  8. ///
  9. /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  10. /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  11. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  12. /// This notice may not be removed from this file.
  13. class CPDFSlidingMainToolbar extends CPDFMainToolbar {
  14. final bool visible;
  15. final AnimationController controller;
  16. CPDFSlidingMainToolbar(
  17. {super.key,
  18. required this.visible,
  19. required this.controller,
  20. required super.ctrl,
  21. super.isDark,
  22. super.actions});
  23. CPDFSlidingMainToolbar.normal(
  24. {required this.visible,
  25. required this.controller,
  26. required super.ctrl,
  27. super.isDark})
  28. : super.normal();
  29. @override
  30. Widget build(BuildContext context) {
  31. visible ? controller.reverse() : controller.forward();
  32. return SlideTransition(
  33. position: Tween(begin: Offset.zero, end: const Offset(0, -1)).animate(
  34. CurvedAnimation(parent: controller, curve: Curves.fastOutSlowIn)),
  35. child: visible ? super.build(context) : null);
  36. }
  37. // @override
  38. // Size get preferredSize =>
  39. // visible ? super.preferredSize : Size(super.preferredSize.width, 0.0);
  40. }
  41. class CPDFMainToolbar extends StatelessWidget implements PreferredSizeWidget {
  42. final CPDFViewCtrl ctrl;
  43. List<CPDFActionWidget>? actions;
  44. bool isDark = false;
  45. CPDFMainToolbar(
  46. {Key? key, required this.ctrl, this.isDark = false, this.actions})
  47. : super(key: key);
  48. CPDFMainToolbar.normal({Key? key, this.isDark = false, required this.ctrl})
  49. : super(key: key) {
  50. actions = [
  51. CPDFActions.thumbnail(onPressed: (context) async {
  52. int? pageIndex = await Navigator.push(context, MaterialPageRoute(builder: (_) {
  53. return CPDFBotaPage(
  54. ctrl: ctrl,
  55. isDark: isDark,
  56. types: const [CPDFBotaType.thumbnails],
  57. );
  58. }));
  59. if (pageIndex != null) {
  60. ctrl.setDisplayPageIndex(pageIndex);
  61. }
  62. }),
  63. CPDFActions.search(),
  64. CPDFActions.bota(),
  65. CPDFActions.more()
  66. ];
  67. }
  68. @override
  69. Widget build(BuildContext context) {
  70. return Theme(
  71. data: isDark
  72. ? comPDFKitDarkTheme
  73. : comPDFKitLightTheme.copyWith(
  74. colorScheme: comPDFKitLightTheme.colorScheme
  75. .copyWith(primary: const Color(0xFFFAFCFF))),
  76. child: Builder(builder: (context) {
  77. return AppBar(
  78. leading: null,
  79. title: Row(
  80. children: [
  81. InkWell(
  82. borderRadius: BorderRadius.circular(6),
  83. child: Padding(
  84. padding: const EdgeInsets.only(
  85. left: 8, right: 8, top: 8, bottom: 8),
  86. child: Text('Viewer',
  87. style: Theme.of(context)
  88. .textTheme
  89. .titleLarge
  90. ?.copyWith(fontFamily: 'sans-serif-medium'))),
  91. onTap: () {},
  92. ),
  93. ],
  94. ),
  95. titleSpacing: 10,
  96. elevation: 2,
  97. actions: actions,
  98. );
  99. }));
  100. }
  101. @override
  102. Size get preferredSize => const Size(double.infinity, 56);
  103. }
  104. class CPDFActions {
  105. static CPDFActionWidget thumbnail({CPDFActionOnPressedCallback? onPressed}) {
  106. return CPDFActionWidget(
  107. image: 'assets/images/ic_thumbnail.png',
  108. package: 'compdfkit_flutter',
  109. onPressed: onPressed,
  110. );
  111. }
  112. static CPDFActionWidget search({CPDFActionOnPressedCallback? onPressed}) {
  113. return CPDFActionWidget(
  114. image: 'assets/images/ic_search.png',
  115. package: 'compdfkit_flutter',
  116. onPressed: onPressed,
  117. );
  118. }
  119. static CPDFActionWidget bota({CPDFActionOnPressedCallback? onPressed}) {
  120. return CPDFActionWidget(
  121. image: 'assets/images/ic_book.png',
  122. package: 'compdfkit_flutter',
  123. onPressed: onPressed,
  124. );
  125. }
  126. static CPDFActionWidget more({CPDFActionOnPressedCallback? onPressed}) {
  127. return CPDFActionWidget(
  128. image: 'assets/images/ic_more.png',
  129. package: 'compdfkit_flutter',
  130. onPressed: onPressed,
  131. );
  132. }
  133. }
  134. typedef CPDFActionOnPressedCallback = Function(BuildContext context);
  135. class CPDFActionWidget extends StatelessWidget {
  136. final String image;
  137. final String package;
  138. final CPDFActionOnPressedCallback? onPressed;
  139. const CPDFActionWidget(
  140. {Key? key,
  141. required this.image,
  142. this.package = 'compdfkit_flutter',
  143. this.onPressed})
  144. : super(key: key);
  145. @override
  146. Widget build(BuildContext context) {
  147. return IconButton(
  148. splashRadius: 24,
  149. onPressed: () {
  150. if (onPressed != null) {
  151. onPressed!(context);
  152. }
  153. },
  154. icon: Image.asset(
  155. image,
  156. package: package,
  157. width: 24,
  158. height: 24,
  159. color: Theme.of(context).colorScheme.onBackground,
  160. ));
  161. }
  162. }