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.

127 lines
4.8KB

  1. import 'package:farm_tpf/utils/validators.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
  4. import 'package:get/get.dart';
  5. import 'package:get/get_state_manager/get_state_manager.dart';
  6. import 'package:farm_tpf/utils/formatter.dart';
  7. import 'widget_field_time_picker.dart';
  8. class FieldDateWidget extends StatefulWidget {
  9. final String hint;
  10. final String value;
  11. final Function(DateTime) onPressed;
  12. final String invalidMessage;
  13. final String tag;
  14. FieldDateWidget(
  15. {@required this.hint,
  16. @required this.tag,
  17. this.value,
  18. @required this.onPressed,
  19. this.invalidMessage});
  20. @override
  21. _FieldDateWidgetState createState() => _FieldDateWidgetState();
  22. }
  23. class _FieldDateWidgetState extends State<FieldDateWidget> {
  24. ChangeDateTimePicker controller;
  25. @override
  26. void initState() {
  27. super.initState();
  28. controller = Get.put(ChangeDateTimePicker(), tag: widget.tag);
  29. }
  30. @override
  31. Widget build(BuildContext context) {
  32. return GetBuilder<ChangeDateTimePicker>(
  33. tag: widget.tag,
  34. builder: (data) {
  35. return SizedBox(
  36. width: double.infinity,
  37. height: Validators.stringNotNullOrEmpty(widget.invalidMessage)
  38. ? 85
  39. : 65,
  40. child: Column(
  41. crossAxisAlignment: CrossAxisAlignment.start,
  42. children: [
  43. Text(
  44. widget.hint ?? '',
  45. style: TextStyle(
  46. color:
  47. Validators.stringNotNullOrEmpty(widget.invalidMessage)
  48. ? Colors.red
  49. : Colors.black54,
  50. fontSize: 13.0),
  51. ),
  52. SizedBox(
  53. width: double.infinity,
  54. height: 44,
  55. child: FlatButton(
  56. padding: EdgeInsets.only(
  57. top: 0.0, right: 0.0, bottom: 0.0, left: 0.0),
  58. onPressed: () {
  59. DatePicker.showDateTimePicker(context,
  60. showTitleActions: true,
  61. onChanged: (date) {}, onConfirm: (date) {
  62. controller.change(date);
  63. widget.onPressed(date);
  64. },
  65. currentTime: data?.selectedDateTime,
  66. locale: LocaleType.vi);
  67. },
  68. child: Column(
  69. crossAxisAlignment: CrossAxisAlignment.start,
  70. children: [
  71. Container(
  72. padding: EdgeInsets.only(
  73. top: 0.0,
  74. right: 0.0,
  75. bottom: 10.5,
  76. left: 0.0),
  77. decoration: BoxDecoration(
  78. border: Border(
  79. bottom: BorderSide(
  80. width: 0.5,
  81. color: Validators.stringNotNullOrEmpty(
  82. widget.invalidMessage)
  83. ? Colors.red
  84. : Colors.black54)),
  85. ),
  86. child: Row(
  87. children: [
  88. Expanded(
  89. child: Text(
  90. data?.selectedDateTime
  91. ?.displayDateTime_DDMMYYYY_HHmm() ??
  92. widget.hint,
  93. style: TextStyle(
  94. fontSize: 14.0,
  95. color: Colors.black))),
  96. Icon(
  97. Icons.date_range,
  98. color: Colors.grey,
  99. ),
  100. ],
  101. ))
  102. ],
  103. )),
  104. ),
  105. Validators.stringNotNullOrEmpty(widget.invalidMessage)
  106. ? Text(
  107. widget.invalidMessage ?? '',
  108. style: TextStyle(
  109. fontSize: 12.0,
  110. color: Colors.red,
  111. fontWeight: FontWeight.normal),
  112. textAlign: TextAlign.left,
  113. )
  114. : SizedBox(),
  115. ],
  116. ),
  117. );
  118. });
  119. }
  120. }