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.

146 lines
4.5KB

  1. import 'package:farm_tpf/presentation/custom_widgets/app_bar_widget.dart';
  2. import 'package:farm_tpf/presentation/custom_widgets/button_widget.dart';
  3. import 'package:farm_tpf/presentation/screens/codes/cubit/code_update_timeline_cubit.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:flutter/scheduler.dart';
  6. import 'package:flutter_bloc/flutter_bloc.dart';
  7. import 'package:keyboard_dismisser/keyboard_dismisser.dart';
  8. import '../../../utils/utils.dart';
  9. import '../../custom_widgets/date_picker/date_picker_widget.dart';
  10. import '../../custom_widgets/dropdown/dropdown_bottom_sheet.dart';
  11. import '../../custom_widgets/textfield/text_field_normal.dart';
  12. import 'widgets/item_column.dart';
  13. class CodeUpdateTimelinePage extends StatefulWidget {
  14. const CodeUpdateTimelinePage({super.key});
  15. @override
  16. State<CodeUpdateTimelinePage> createState() => _CodeUpdateTimelinePageState();
  17. }
  18. class _CodeUpdateTimelinePageState extends State<CodeUpdateTimelinePage> {
  19. final bloc = CodeUpdateTimelineCubit();
  20. @override
  21. void initState() {
  22. super.initState();
  23. bloc.preparedData();
  24. }
  25. @override
  26. void dispose() {
  27. bloc.dispose();
  28. super.dispose();
  29. }
  30. @override
  31. Widget build(BuildContext context) {
  32. return Scaffold(
  33. appBar: AppBarWidget(),
  34. body: BlocListener<CodeUpdateTimelineCubit, CodeUpdateTimelineState>(
  35. bloc: bloc,
  36. listener: ((context, state) {
  37. if (state is CodeUpdateTimelineLoading) {
  38. SchedulerBinding.instance.addPostFrameCallback((timeStamp) {
  39. UtilWidget.showLoading();
  40. });
  41. } else if (state is CodeUpdateTimelineFailure) {
  42. SchedulerBinding.instance.addPostFrameCallback((timeStamp) {
  43. UtilWidget.hideLoading();
  44. // UtilWidget.showToastError(state.errorMessage);
  45. });
  46. } else if (state is CodeUpdateTimelinePrepareDataSuccessful) {
  47. SchedulerBinding.instance.addPostFrameCallback((timeStamp) {
  48. UtilWidget.hideLoading();
  49. });
  50. }
  51. }),
  52. child: KeyboardDismisser(
  53. child: Container(
  54. child: Form(
  55. key: bloc.formKey,
  56. child: Column(
  57. children: [
  58. Expanded(
  59. child: _widgetBody(),
  60. ),
  61. Padding(
  62. padding: const EdgeInsets.all(8.0),
  63. child: ButtonWidget(
  64. title: 'Cập nhật',
  65. onPressed: () {},
  66. ),
  67. ),
  68. ],
  69. ),
  70. ),
  71. ),
  72. ),
  73. ),
  74. );
  75. }
  76. Widget _widgetBody() {
  77. return Container(
  78. padding: const EdgeInsets.all(16),
  79. child: SingleChildScrollView(
  80. child: Column(
  81. crossAxisAlignment: CrossAxisAlignment.start,
  82. children: [
  83. ValueListenableBuilder<DateTime>(
  84. valueListenable: bloc.actionDate,
  85. builder: (context, actionDate, _) {
  86. return ItemColumnWidget(
  87. title: 'Ngày nhập',
  88. child: DatePickerWidget(
  89. initDateTime: actionDate,
  90. onUpdateDateTime: (selectedDate) {
  91. if (selectedDate != null) {
  92. bloc.actionDate.value = selectedDate;
  93. }
  94. },
  95. ),
  96. );
  97. },
  98. ),
  99. SizedBox(
  100. height: 8,
  101. ),
  102. ItemColumnWidget(
  103. title: 'Hoạt động',
  104. child: ValueListenableBuilder<String>(
  105. valueListenable: bloc.selectedActionType,
  106. builder: (context, selected, _) {
  107. return DropdownBottomSheet(
  108. dataSources: bloc.actionTypes,
  109. initValue: selected,
  110. onSelected: (val) {
  111. bloc.selectedActionType.value = val.key ?? '';
  112. },
  113. hint: 'Hoạt động',
  114. );
  115. },
  116. ),
  117. ),
  118. const SizedBox(
  119. height: 8,
  120. ),
  121. ItemColumnWidget(
  122. title: 'Mô tả',
  123. child: TextFieldNormal(
  124. controller: bloc.descriptionCtl,
  125. maxLines: 2,
  126. hint: 'Mô tả',
  127. ),
  128. ),
  129. const SizedBox(
  130. height: 16,
  131. ),
  132. ],
  133. ),
  134. ),
  135. );
  136. }
  137. }