convert_image_options_widget.dart 3.2 KB

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