convert_excel_options_widget.dart 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import 'package:ConversionFlutterDemo/models/convert_contain_options_bean.dart';
  2. import 'package:ConversionFlutterDemo/states/convert_options_provider.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:provider/provider.dart';
  5. class ConvertExcelOptionsWidget extends StatefulWidget {
  6. const ConvertExcelOptionsWidget({Key? key}) : super(key: key);
  7. @override
  8. State<ConvertExcelOptionsWidget> createState() =>
  9. _ConvertExcelOptionsWidgetState();
  10. }
  11. class _ConvertExcelOptionsWidgetState extends State<ConvertExcelOptionsWidget> {
  12. @override
  13. Widget build(BuildContext context) {
  14. bool containImages = context.select<ConvertOptionsProvider, bool>(
  15. (value) => value.excelOptions.containImages);
  16. bool containAnnotations = context.select<ConvertOptionsProvider, bool>(
  17. (value) => value.excelOptions.containAnnotations);
  18. return SingleChildScrollView(child: Padding(
  19. padding: EdgeInsets.all(8),
  20. child: Column(
  21. crossAxisAlignment: CrossAxisAlignment.start,
  22. children: [
  23. Row(
  24. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  25. children: [
  26. const Text('ContainImages'),
  27. Switch(
  28. value: containImages,
  29. onChanged: (value) {
  30. context
  31. .read<ConvertOptionsProvider>()
  32. .changeExcelOptions(containImages: value);
  33. })
  34. ],
  35. ),
  36. Row(
  37. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  38. children: [
  39. const Text('ContainAnnotations'),
  40. Switch(
  41. value: containAnnotations,
  42. onChanged: (value) {
  43. context
  44. .read<ConvertOptionsProvider>()
  45. .changeExcelOptions(containAnnotations: value);
  46. })
  47. ],
  48. ),
  49. excelWorkSheetOptions((value) {
  50. context
  51. .read<ConvertOptionsProvider>()
  52. .changeExcelOptions(workSheetOptions: value);
  53. }),
  54. excelContentOptions((value) {
  55. context
  56. .read<ConvertOptionsProvider>()
  57. .changeExcelOptions(contentOptions: value);
  58. })
  59. ],
  60. )),);
  61. }
  62. Widget excelWorkSheetOptions(ValueChanged<ExcelWorkSheetOptions> onChanged) {
  63. ExcelWorkSheetOptions workSheetOptions =
  64. context.select<ConvertOptionsProvider, ExcelWorkSheetOptions>(
  65. (value) => value.excelOptions.workSheetOptions);
  66. return Column(
  67. crossAxisAlignment: CrossAxisAlignment.start,
  68. children: [
  69. Text('WorkSheetOptions:'),
  70. _excelWorkSheetOptionsItem(
  71. workSheetOptions, ExcelWorkSheetOptions.ForEachTable, onChanged),
  72. _excelWorkSheetOptionsItem(
  73. workSheetOptions, ExcelWorkSheetOptions.ForEachPage, onChanged),
  74. _excelWorkSheetOptionsItem(
  75. workSheetOptions, ExcelWorkSheetOptions.ForTheDocument, onChanged),
  76. ],
  77. );
  78. }
  79. Widget _excelWorkSheetOptionsItem(
  80. ExcelWorkSheetOptions currentWorkSheetOptions,
  81. ExcelWorkSheetOptions options,
  82. ValueChanged<ExcelWorkSheetOptions> onChanged) {
  83. return CheckboxListTile(
  84. controlAffinity: ListTileControlAffinity.leading,
  85. title: Text(options.name),
  86. value: currentWorkSheetOptions == options,
  87. onChanged: (value) {
  88. onChanged(options);
  89. });
  90. }
  91. Widget excelContentOptions(ValueChanged<ContentOptions> onChanged) {
  92. ContentOptions contentOptions =
  93. context.select<ConvertOptionsProvider, ContentOptions>(
  94. (value) => value.excelOptions.contentOptions);
  95. return Column(
  96. crossAxisAlignment: CrossAxisAlignment.start,
  97. children: [
  98. Text('ContentOptions:'),
  99. _excelContentOptionsItem(
  100. contentOptions, ContentOptions.OnlyText, onChanged),
  101. _excelContentOptionsItem(
  102. contentOptions, ContentOptions.OnlyTable, onChanged),
  103. _excelContentOptionsItem(
  104. contentOptions, ContentOptions.AllContent, onChanged),
  105. ],
  106. );
  107. }
  108. Widget _excelContentOptionsItem(ContentOptions currentOptions,
  109. ContentOptions options, ValueChanged<ContentOptions> onChanged) {
  110. return CheckboxListTile(
  111. controlAffinity: ListTileControlAffinity.leading,
  112. title: Text(options.name),
  113. value: currentOptions == options,
  114. onChanged: (value) {
  115. onChanged(options);
  116. });
  117. }
  118. }