annot_attribute_options_widget.dart 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. import 'package:flutter/material.dart';
  2. import 'package:kmpdfkit_demo/widgets/contains.dart';
  3. import 'package:kmpdfkit_demo/widgets/function/attrwidget/attr_free_text_widget.dart';
  4. import 'package:kmpdfkit_demo/widgets/function/attrwidget/attr_link_widget.dart';
  5. import 'package:kmpdfkit_demo/widgets/function/attrwidget/signature/attr_signature_list_widget.dart';
  6. import 'package:kmpdfkit_demo/widgets/function/attrwidget/stamp/attr_stamp_widget.dart';
  7. import 'package:kmpdfkit_demo/widgets/function/attrwidget/base_slider_widget.dart';
  8. import 'package:kmpdfkit_demo/widgets/function/attrwidget/attr_color_list_widget.dart';
  9. import 'package:kmpdfkit_demo/widgets/function/attrwidget/ink/attr_ink_pen_wave_widget.dart';
  10. import 'package:kmpdfkit_demo/widgets/function/attrwidget/ink/attr_ink_line_width_widget.dart';
  11. import 'package:kmpdfkit_demo/widgets/function/attrwidget/attr_shape_type_widget.dart';
  12. import 'package:kmpdfkit_demo/widgets/models/annot_attribute_bean.dart';
  13. import 'package:kmpdfkit_demo/widgets/models/annot_bean.dart';
  14. import 'package:kmpdfkit_demo/widgets/models/text_stamp_bean.dart';
  15. /// annot_attribute_options_widget.dart
  16. ///
  17. /// Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  18. ///
  19. /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  20. /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  21. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  22. /// This notice may not be removed from this file.
  23. typedef AnnotAttributeOptionsCallback = void Function(AnnotAttributeBean);
  24. class AnnotAttributeOptionsWidget extends StatefulWidget {
  25. AnnotBean annotBean;
  26. final AnnotAttributeOptionsCallback attributeOptionsCallback;
  27. AnnotAttributeOptionsWidget(
  28. {Key? key,
  29. required this.annotBean,
  30. required this.attributeOptionsCallback})
  31. : super(key: key);
  32. @override
  33. State<AnnotAttributeOptionsWidget> createState() =>
  34. _AnnotAttributeOptionsWidgetState();
  35. }
  36. class _AnnotAttributeOptionsWidgetState
  37. extends State<AnnotAttributeOptionsWidget> {
  38. @override
  39. void initState() {
  40. super.initState();
  41. }
  42. @override
  43. Widget build(BuildContext context) {
  44. return annotationAttrWidget();
  45. }
  46. Widget annotationAttrWidget() {
  47. switch (widget.annotBean.annotType) {
  48. case AnnotationType.highlight:
  49. case AnnotationType.underline:
  50. case AnnotationType.squiggly:
  51. case AnnotationType.strikeout:
  52. {
  53. return Column(
  54. mainAxisSize: MainAxisSize.min,
  55. children: [_colorWidget(), _colorAlphaWidget()]);
  56. }
  57. case AnnotationType.ink:
  58. {
  59. return Column(mainAxisSize: MainAxisSize.min, children: [
  60. InkCurvedWidget(
  61. color: widget.annotBean.attributeBean.color,
  62. lineWidth: widget.annotBean.attributeBean.borderWidth,
  63. alpha: widget.annotBean.attributeBean.alpha,
  64. ),
  65. _colorWidget(),
  66. _colorAlphaWidget(),
  67. _inkPenSwitchWidget()
  68. ]);
  69. }
  70. case AnnotationType.shape:
  71. {
  72. return Column(mainAxisSize: MainAxisSize.min, children: [
  73. ShapeAttrWidget(
  74. bean: widget.annotBean.attributeBean,
  75. callback: (AnnotAttributeBean? bean) {
  76. if (bean != null) {
  77. widget.annotBean.attributeBean = bean;
  78. }
  79. widget.attributeOptionsCallback(widget.annotBean.attributeBean);
  80. },
  81. )
  82. ]);
  83. }
  84. case AnnotationType.freetext:
  85. {
  86. return Column(mainAxisSize: MainAxisSize.min, children: [
  87. AttrFreeTextWidget(
  88. bean: widget.annotBean.attributeBean,
  89. callback: widget.attributeOptionsCallback,
  90. )
  91. ]);
  92. }
  93. case AnnotationType.signature:
  94. {
  95. return AttrSignatureListWidget(
  96. callback: (imagePath) {
  97. widget.annotBean.attributeBean
  98. ..imagePath = imagePath
  99. ..isSignature = true;
  100. widget.attributeOptionsCallback(widget.annotBean.attributeBean);
  101. Navigator.pop(context);
  102. },
  103. );
  104. }
  105. case AnnotationType.stamp:
  106. {
  107. return AttrStampWidget(callback:
  108. (String? standardStampName, TextStampBean? textStampBean) {
  109. if (standardStampName != null) {
  110. widget.annotBean.attributeBean
  111. ..standardStampName = standardStampName
  112. ..customStampBean = null;
  113. }
  114. if (textStampBean != null) {
  115. widget.annotBean.attributeBean
  116. ..standardStampName = ''
  117. ..customStampBean = textStampBean;
  118. }
  119. widget.attributeOptionsCallback(widget.annotBean.attributeBean);
  120. Navigator.pop(context);
  121. });
  122. }
  123. case AnnotationType.link:
  124. {
  125. return AttrLinkWidget(
  126. attributeBean: widget.annotBean.attributeBean,
  127. callback: (LinkType linkType, String linkWeb, int linkPage,
  128. String linkEmail) {
  129. widget.annotBean.attributeBean
  130. ..linkType = linkType
  131. ..linkWeb = linkWeb
  132. ..linkPage = linkPage
  133. ..linkEmail = linkEmail;
  134. widget.attributeOptionsCallback(widget.annotBean.attributeBean);
  135. },
  136. cancelCreateCallback: (cancelCreateLink) {
  137. widget.annotBean.attributeBean.cancelCreateLink =
  138. cancelCreateLink;
  139. widget.attributeOptionsCallback(widget.annotBean.attributeBean);
  140. },
  141. );
  142. }
  143. default:
  144. return const Placeholder();
  145. }
  146. }
  147. Widget _colorWidget() {
  148. return ColorListWidget(
  149. color: widget.annotBean.attributeBean.color,
  150. colorOptionsCallback: (color) {
  151. setState(() {
  152. widget.annotBean.attributeBean.color = color;
  153. });
  154. widget.attributeOptionsCallback(widget.annotBean.attributeBean);
  155. });
  156. }
  157. Widget _colorAlphaWidget() {
  158. return colorAlphaWidget(
  159. currentAlphaValue: widget.annotBean.attributeBean.alpha,
  160. alphaOptionsCallback: (value) {
  161. setState(() {
  162. widget.annotBean.attributeBean.alpha = value.round();
  163. });
  164. widget.attributeOptionsCallback(widget.annotBean.attributeBean);
  165. });
  166. }
  167. Widget _inkPenSwitchWidget() {
  168. return InkPenLineWidthWidget(
  169. borderWidth: widget.annotBean.attributeBean.borderWidth,
  170. inkBorderWidthCallback: (borderWidth) {
  171. setState(() {
  172. widget.annotBean.attributeBean.borderWidth = borderWidth;
  173. widget.attributeOptionsCallback(widget.annotBean.attributeBean);
  174. });
  175. });
  176. }
  177. }