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.

176 lines
5.5KB

  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:farm_tpf/models/item_dropdown.dart';
  3. import 'package:farm_tpf/presentation/screens/codes/models/stamp_type.dart';
  4. import 'package:farm_tpf/presentation/screens/codes/widgets/item_column.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:flutter/scheduler.dart';
  7. import 'package:flutter/services.dart';
  8. import 'package:flutter/src/widgets/framework.dart';
  9. import 'package:flutter/src/widgets/placeholder.dart';
  10. import 'package:flutter_bloc/flutter_bloc.dart';
  11. import 'package:get/get.dart';
  12. import 'package:keyboard_dismisser/keyboard_dismisser.dart';
  13. import '../../../utils/utils.dart';
  14. import '../../custom_widgets/app_bar_widget.dart';
  15. import '../../custom_widgets/button_widget.dart';
  16. import '../../custom_widgets/date_picker/date_picker_widget.dart';
  17. import '../../custom_widgets/dropdown/dropdown_bottom_sheet.dart';
  18. import '../../custom_widgets/textfield/text_field_normal.dart';
  19. import 'cubit/create_task_cubit.dart';
  20. class CreateTaskPage extends StatefulWidget {
  21. final int cropId;
  22. const CreateTaskPage({
  23. super.key,
  24. required this.cropId,
  25. });
  26. @override
  27. State<CreateTaskPage> createState() => _CreateTaskPageState();
  28. }
  29. class _CreateTaskPageState extends State<CreateTaskPage> {
  30. final bloc = CreateTaskCubit();
  31. @override
  32. void initState() {
  33. super.initState();
  34. bloc.preparedData(cropId: widget.cropId);
  35. }
  36. @override
  37. void dispose() {
  38. bloc.dispose();
  39. super.dispose();
  40. }
  41. @override
  42. Widget build(BuildContext context) {
  43. return Scaffold(
  44. appBar: AppBarWidget(),
  45. body: BlocListener<CreateTaskCubit, CreateTaskState>(
  46. bloc: bloc,
  47. listener: ((context, state) {
  48. if (state is CreateTaskLoading) {
  49. SchedulerBinding.instance.addPostFrameCallback((timeTask) {
  50. UtilWidget.showLoading();
  51. });
  52. } else if (state is CreateTaskFailure) {
  53. SchedulerBinding.instance.addPostFrameCallback((timeTask) {
  54. UtilWidget.hideLoading();
  55. // UtilWidget.showToastError(state.errorMessage);
  56. });
  57. } else if (state is CreateTaskPrepareDataSuccessful) {
  58. SchedulerBinding.instance.addPostFrameCallback((timeTask) {
  59. UtilWidget.hideLoading();
  60. });
  61. }
  62. }),
  63. child: KeyboardDismisser(
  64. child: Container(
  65. child: Form(
  66. key: bloc.formKey,
  67. child: Column(
  68. children: [
  69. Expanded(
  70. child: _widgetBody(),
  71. ),
  72. Padding(
  73. padding: const EdgeInsets.all(8.0),
  74. child: ButtonWidget(
  75. title: 'Cập nhật',
  76. onPressed: () {
  77. bloc.onSubmit(widget.cropId);
  78. },
  79. ),
  80. ),
  81. ],
  82. ),
  83. ),
  84. ),
  85. ),
  86. ),
  87. );
  88. }
  89. Widget _widgetBody() {
  90. return Container(
  91. padding: const EdgeInsets.all(16),
  92. child: SingleChildScrollView(
  93. child: Column(
  94. crossAxisAlignment: CrossAxisAlignment.start,
  95. children: [
  96. // ItemColumnWidget(
  97. // title: 'Giao việc cho',
  98. // child: ValueListenableBuilder<String>(
  99. // valueListenable: bloc.selectedPEmployee,
  100. // builder: (context, selected, _) {
  101. // return ValueListenableBuilder<List<ItemDropDown>>(
  102. // valueListenable: bloc.employees,
  103. // builder: (context, employees, _) {
  104. // return DropdownBottomSheet(
  105. // dataSources: employees,
  106. // initValue: selected,
  107. // onSelected: (val) {
  108. // bloc.selectedPEmployee.value = val.key ?? '';
  109. // },
  110. // hint: 'Giao việc cho',
  111. // );
  112. // },
  113. // );
  114. // },
  115. // ),
  116. // ),
  117. // const SizedBox(
  118. // height: 8,
  119. // ),
  120. ItemColumnWidget(
  121. title: 'Tiêu đề',
  122. child: TextFieldNormal(
  123. controller: bloc.titleNameCtl,
  124. maxLines: 1,
  125. hint: 'Tiêu đề',
  126. ),
  127. ),
  128. const SizedBox(
  129. height: 8,
  130. ),
  131. ItemColumnWidget(
  132. title: 'Mô tả công việc',
  133. child: TextFieldNormal(
  134. controller: bloc.detailCtl,
  135. maxLines: 3,
  136. hint: 'Mô tả công việc',
  137. ),
  138. ),
  139. const SizedBox(
  140. height: 8,
  141. ),
  142. const SizedBox(height: 8),
  143. ValueListenableBuilder<DateTime>(
  144. valueListenable: bloc.deadline,
  145. builder: (context, dexuat, _) {
  146. return ItemColumnWidget(
  147. title: 'Hạn chót',
  148. child: DatePickerWidget(
  149. initDateTime: dexuat,
  150. onUpdateDateTime: (selectedDate) {
  151. if (selectedDate != null) {
  152. bloc.deadline.value = selectedDate;
  153. }
  154. },
  155. ),
  156. );
  157. },
  158. ),
  159. const SizedBox(
  160. height: 16,
  161. ),
  162. ],
  163. ),
  164. ),
  165. );
  166. }
  167. }