convert_image_options_widget.dart 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /// convert_image_options_widget.dart
  2. ///
  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. import 'package:flutter/material.dart';
  10. import 'package:flutter/services.dart';
  11. import 'package:kmpdfkit_conversion_flutter/models/options/convert_image_options.dart';
  12. import 'package:provider/provider.dart';
  13. import '../../states/convert_options_provider.dart';
  14. class ConvertImageOptionsWidget extends StatefulWidget {
  15. const ConvertImageOptionsWidget({Key? key}) : super(key: key);
  16. @override
  17. State<ConvertImageOptionsWidget> createState() =>
  18. _ConvertImageOptionsWidgetState();
  19. }
  20. class _ConvertImageOptionsWidgetState extends State<ConvertImageOptionsWidget> {
  21. @override
  22. Widget build(BuildContext context) {
  23. bool containAnnotations = context.select<ConvertOptionsProvider, bool>(
  24. (value) => value.imageOptions.containAnnotations);
  25. return Padding(
  26. padding: EdgeInsets.all(8),
  27. child: Column(
  28. crossAxisAlignment: CrossAxisAlignment.start,
  29. children: [
  30. Row(
  31. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  32. children: [
  33. const Text('ContainAnnotations'),
  34. Switch(
  35. value: containAnnotations,
  36. onChanged: (value) {
  37. context
  38. .read<ConvertOptionsProvider>()
  39. .changeImageOptions(containAnnotations: value);
  40. })
  41. ],
  42. ),
  43. const Text('ImageDpi:'),
  44. TextFormField(
  45. keyboardType: TextInputType.number,
  46. textInputAction: TextInputAction.done,
  47. initialValue: "300",
  48. maxLength: 1000,
  49. inputFormatters:
  50. [
  51. FilteringTextInputFormatter.allow(RegExp(r'^\d{1,4}(\.\d{0,2})?')),
  52. FilteringTextInputFormatter.deny(RegExp(r'[\\,|\\.]')),
  53. LengthLimitingTextInputFormatter(4)
  54. ],
  55. decoration: const InputDecoration(labelText: '请输入范围在1~1000内的整数'),
  56. onChanged: (value){
  57. context
  58. .read<ConvertOptionsProvider>()
  59. .changeImageOptions(imageDpi: int.parse(value));
  60. },
  61. ),
  62. imagePageOptions((value) {
  63. context
  64. .read<ConvertOptionsProvider>()
  65. .changeImageOptions(imagePageOptions: value);
  66. })
  67. ],
  68. ),
  69. );
  70. }
  71. Widget imagePageOptions(ValueChanged<ImagePageOptions> onChanged) {
  72. ImagePageOptions imagePageOptions =
  73. context.select<ConvertOptionsProvider, ImagePageOptions>(
  74. (value) => value.imageOptions.imagePageOptions);
  75. return Column(
  76. crossAxisAlignment: CrossAxisAlignment.start,
  77. children: [
  78. const Text('Page Options:'),
  79. _imagePageOptionsItem(
  80. imagePageOptions, ImagePageOptions.jpeg, onChanged),
  81. _imagePageOptionsItem(
  82. imagePageOptions, ImagePageOptions.png, onChanged),
  83. ],
  84. );
  85. }
  86. Widget _imagePageOptionsItem(ImagePageOptions currentOptions,
  87. ImagePageOptions options, ValueChanged<ImagePageOptions> onChanged) {
  88. return CheckboxListTile(
  89. controlAffinity: ListTileControlAffinity.leading,
  90. title: Text(options.name),
  91. value: currentOptions == options,
  92. onChanged: (value) {
  93. onChanged(options);
  94. });
  95. }
  96. }