You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
5.2KB

  1. import 'package:farm_tpf/custom_model/action_form/CommonData.dart';
  2. import 'package:farm_tpf/presentation/screens/actions/state_management_helper/change_dropdown_controller.dart';
  3. import 'package:farm_tpf/presentation/screens/resources/sc_common_data_helper.dart';
  4. import 'package:farm_tpf/utils/validators.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:get/get.dart';
  7. class DropdownSupplyWidget extends StatefulWidget {
  8. final String? titleName;
  9. final String condition;
  10. final String hint;
  11. final String? value;
  12. final Function(CommonData) onPressed;
  13. final String? invalidMessage;
  14. final String tag;
  15. final String tbSupply;
  16. DropdownSupplyWidget(
  17. {this.titleName,
  18. required this.hint,
  19. required this.tag,
  20. this.value,
  21. required this.condition,
  22. required this.onPressed,
  23. this.invalidMessage,
  24. required this.tbSupply});
  25. @override
  26. _DropdownSupplyWidgetState createState() => _DropdownSupplyWidgetState();
  27. }
  28. class _DropdownSupplyWidgetState extends State<DropdownSupplyWidget> {
  29. ChangeDropdownController? controller;
  30. @override
  31. void initState() {
  32. super.initState();
  33. controller = Get.put(ChangeDropdownController(), tag: widget.tag);
  34. }
  35. @override
  36. Widget build(BuildContext context) {
  37. return GetBuilder<ChangeDropdownController>(
  38. tag: widget.tag,
  39. builder: (data) {
  40. return SizedBox(
  41. width: double.infinity,
  42. height: Validators.stringNotNullOrEmpty(widget.invalidMessage ?? '') ? 85 : 65,
  43. child: Column(
  44. crossAxisAlignment: CrossAxisAlignment.start,
  45. children: [
  46. Validators.stringNotNullOrEmpty(data?.currentData?.name ?? '')
  47. ? Text(
  48. widget.hint ?? '',
  49. style: TextStyle(
  50. color: Validators.stringNotNullOrEmpty(widget.invalidMessage ?? '') ? Colors.red : Colors.black54, fontSize: 13.0),
  51. )
  52. : Text(
  53. '',
  54. style: TextStyle(
  55. color: Validators.stringNotNullOrEmpty(widget.invalidMessage ?? '') ? Colors.red : Colors.black54, fontSize: 13.0),
  56. ),
  57. SizedBox(
  58. width: double.infinity,
  59. height: 44,
  60. child: TextButton(
  61. onPressed: () {
  62. Navigator.of(context)
  63. .push(MaterialPageRoute(
  64. builder: (_) => CommonDataHelperScreen(
  65. titleName: widget.titleName ?? '',
  66. tbSupply: widget.tbSupply ?? '',
  67. condition: widget.condition ?? '',
  68. selectedId: data?.selectedId ?? -1,
  69. currentItems: [],
  70. currentEditId: -1),
  71. fullscreenDialog: false))
  72. .then((value) {
  73. if (value != null) {
  74. var result = value as CommonData;
  75. controller?.change(result);
  76. widget.onPressed(result);
  77. }
  78. });
  79. },
  80. child: Column(
  81. crossAxisAlignment: CrossAxisAlignment.start,
  82. children: [
  83. Container(
  84. padding: EdgeInsets.only(top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
  85. decoration: BoxDecoration(
  86. border: Border(
  87. bottom: BorderSide(
  88. width: 0.5,
  89. color: Validators.stringNotNullOrEmpty(widget.invalidMessage ?? '') ? Colors.red : Colors.black54)),
  90. ),
  91. child: Row(
  92. children: [
  93. Expanded(
  94. child: Validators.stringNotNullOrEmpty(data?.currentData?.name ?? '')
  95. ? Text(data?.currentData?.name ?? '', style: TextStyle(fontSize: 16.0, color: Colors.black))
  96. : Text(widget.hint, style: TextStyle(fontSize: 16.0, color: Colors.black54)),
  97. ),
  98. Icon(
  99. Icons.arrow_drop_down,
  100. color: Colors.grey,
  101. ),
  102. ],
  103. ))
  104. ],
  105. )),
  106. ),
  107. Validators.stringNotNullOrEmpty(widget.invalidMessage ?? '')
  108. ? Text(
  109. widget.invalidMessage ?? '',
  110. style: TextStyle(fontSize: 12.0, color: Colors.red, fontWeight: FontWeight.normal),
  111. textAlign: TextAlign.left,
  112. )
  113. : SizedBox(),
  114. ],
  115. ),
  116. );
  117. });
  118. }
  119. }