cpdf_base_input_dialog_widget.dart 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import 'package:compdfkit_flutter/theme/themes.dart';
  2. import 'package:flutter/material.dart';
  3. /// Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  4. ///
  5. /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  6. /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  7. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  8. /// This notice may not be removed from this file.
  9. class CPDFPageNavigationWidget extends StatefulWidget {
  10. int pageCount = 0;
  11. String title;
  12. String hintText;
  13. String cancelText;
  14. String positiveText;
  15. CPDFPageNavigationWidget(
  16. {required this.pageCount,
  17. this.title = 'Enter a page number',
  18. this.hintText = 'Page (1/~)',
  19. this.cancelText = 'CANCEL',
  20. this.positiveText = 'OK',
  21. super.key});
  22. @override
  23. State<CPDFPageNavigationWidget> createState() =>
  24. _CPDFPageNavigationWidgetState();
  25. }
  26. class _CPDFPageNavigationWidgetState extends State<CPDFPageNavigationWidget> {
  27. bool _enable = false;
  28. final TextEditingController _controller = TextEditingController();
  29. @override
  30. void initState() {
  31. super.initState();
  32. }
  33. @override
  34. Widget build(BuildContext context) {
  35. return AlertDialog(
  36. contentPadding: const EdgeInsets.symmetric(horizontal: 24, vertical: 8),
  37. title: Text(widget.title, style: Theme.of(context).textTheme.titleMedium),
  38. content: SizedBox(
  39. width: 260,
  40. child: TextField(
  41. keyboardType: TextInputType.number,
  42. controller: _controller,
  43. decoration: textFieldStyle(context).copyWith(
  44. hintText: widget.hintText,
  45. ),
  46. onChanged: (v) {
  47. int jumpPageIndex = int.tryParse(v) ?? 0;
  48. setState(() {
  49. _enable = v.isNotEmpty &&
  50. jumpPageIndex > 0 &&
  51. jumpPageIndex <= widget.pageCount;
  52. });
  53. },
  54. ),
  55. ),
  56. actions: <Widget>[
  57. TextButton(
  58. onPressed: () {
  59. Navigator.pop(context);
  60. },
  61. child: Text(widget.cancelText)),
  62. TextButton(
  63. onPressed: !_enable
  64. ? null
  65. : () {
  66. int pageIndex = int.tryParse(_controller.value.text) ?? 0;
  67. Navigator.pop(context, pageIndex - 1);
  68. },
  69. child: Text(
  70. widget.positiveText,
  71. style: TextStyle(),
  72. )),
  73. ],
  74. );
  75. }
  76. }