|
- import 'dart:convert';
-
- import 'package:farm_tpf/custom_model/Harvest.dart';
- import 'package:farm_tpf/custom_model/Packing.dart';
- import 'package:farm_tpf/data/api/app_exception.dart';
- import 'package:farm_tpf/data/repository/repository.dart';
- import 'package:farm_tpf/presentation/custom_widgets/bloc/media_helper_bloc.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_media_picker.dart';
- import 'package:farm_tpf/presentation/screens/actions/bloc/action_detail_bloc.dart';
- import 'package:farm_tpf/presentation/screens/actions/bloc_get_harvest.dart';
- import 'package:farm_tpf/presentation/screens/actions/state_management_helper/change_file_controller.dart';
- import 'package:farm_tpf/utils/const_common.dart';
- import 'package:farm_tpf/utils/const_string.dart';
- import 'package:farm_tpf/utils/const_style.dart';
- import 'package:farm_tpf/utils/validators.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_bloc/flutter_bloc.dart';
- import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
- import 'package:get/get.dart';
- import 'package:intl/intl.dart';
- import 'package:keyboard_dismisser/keyboard_dismisser.dart';
- import 'package:pattern_formatter/pattern_formatter.dart';
- import 'package:farm_tpf/utils/formatter.dart';
-
- import '../util_action.dart';
-
- class EditActionPackingScreen extends StatefulWidget {
- final int cropId;
- final bool isEdit;
- final int activityId;
- final int harvestId;
- EditActionPackingScreen(
- {@required this.cropId,
- this.isEdit = false,
- this.activityId,
- this.harvestId});
-
- @override
- _EditActionPackingScreenState createState() =>
- _EditActionPackingScreenState();
- }
-
- class _EditActionPackingScreenState extends State<EditActionPackingScreen> {
- final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
- final _repository = Repository();
- GlobalKey<FormState> _formKey = GlobalKey();
- bool _autoValidate = false;
- Packing _packing = Packing();
- TextEditingController _l1Controller = TextEditingController();
- TextEditingController _l2Controller = TextEditingController();
- TextEditingController _l3Controller = TextEditingController();
- TextEditingController _removedQuantityController = TextEditingController();
- TextEditingController _descriptionController = TextEditingController();
-
- List<Harvest> _harvests = List<Harvest>();
- Harvest harvestValue;
- String executeTimeView;
- DateTime executeTime = DateTime.now();
- List<String> filePaths = List<String>();
- var changeFileController = Get.put(ChangeFileController());
-
- @override
- void initState() {
- super.initState();
- changeFileController.initValue();
- var parsedExecuteDate =
- DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(executeTime);
- _packing.executeDate = "$parsedExecuteDate";
- executeTimeView = DateFormat("dd/MM/yyyy HH:mm").format(executeTime);
- _packing.cropId = widget.cropId;
-
- if (!widget.isEdit) {
- getHarvestBloc.getHarvests((data) {
- _harvests = data;
- for (var item in _harvests) {
- if (item.id == widget.harvestId) {
- harvestValue = item;
- break;
- }
- }
- }, (err) {});
- }
- }
-
- _validateInputs() async {
- if (_formKey.currentState.validate()) {
- _formKey.currentState.save();
- LoadingDialog.showLoadingDialog(context);
- filePaths = Get.find<ChangeFileController>().files;
- try {
- var activityPacking = jsonEncode(_packing.toJson()).toString();
- //ADD NEW
- if (_packing.activityId == null) {
- _repository.createAction((value) {
- LoadingDialog.hideLoadingDialog(context);
- Get.back(result: value);
- Get.snackbar(label_add_success, "Hoạt động đóng gói",
- snackPosition: SnackPosition.BOTTOM);
- }, (error) {
- LoadingDialog.hideLoadingDialog(context);
- _scaffoldKey.currentState.showSnackBar(SnackBar(
- content: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- Flexible(child: Text(AppException.handleError(error))),
- Icon(Icons.error),
- ],
- ),
- backgroundColor: Colors.red,
- duration: Duration(seconds: 3),
- ));
- },
- apiAddAction: ConstCommon.apiAddPacking,
- paramActivity: ConstCommon.paramsActionPacking,
- activityAction: activityPacking,
- filePaths: filePaths);
- } else {
- //UPDATE
- _repository.updateAction((value) {
- LoadingDialog.hideLoadingDialog(context);
- Get.back(result: value);
- Get.snackbar(label_update_success, "Hoạt động đóng gói",
- snackPosition: SnackPosition.BOTTOM);
- }, (error) {
- LoadingDialog.hideLoadingDialog(context);
- _scaffoldKey.currentState.showSnackBar(SnackBar(
- content: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- Flexible(child: Text(AppException.handleError(error))),
- Icon(Icons.error),
- ],
- ),
- backgroundColor: Colors.red,
- duration: Duration(seconds: 3),
- ));
- },
- apiUpdateAction: ConstCommon.apiUpdatePacking,
- paramActivity: ConstCommon.paramsActionPacking,
- activityAction: activityPacking,
- filePaths: filePaths);
- }
- } catch (e) {
- LoadingDialog.hideLoadingDialog(context);
- print(e.toString());
- }
- } else {
- _autoValidate = true;
- }
- }
-
- List<DropdownMenuItem<Harvest>> _buildDropMenu(List<Harvest> actions) {
- return actions
- .map((action) => DropdownMenuItem<Harvest>(
- child: Text("Mã thu hoạch " + action.id.toString()),
- value: action,
- ))
- .toList();
- }
-
- Widget _dropdownHarvest() {
- return StreamBuilder(
- stream: getHarvestBloc.actions,
- builder: (context, AsyncSnapshot<dynamic> snapshot) {
- if (snapshot.hasData) {
- return DropdownButtonFormField<Harvest>(
- value: harvestValue,
- hint: Text("Mã thu hoạch"),
- onChanged: (Harvest newValue) {
- setState(() {
- harvestValue = newValue;
- _packing.harvestId = newValue.id;
- });
- },
- validator: (value) => value == null ? "Mã thu hoạch" : null,
- isExpanded: true,
- items: _buildDropMenu(_harvests));
- } else {
- return Center(
- child: CircularProgressIndicator(),
- );
- }
- },
- );
- }
-
- Widget _btnExecuteTimePicker() {
- return FlatButton(
- padding: EdgeInsets.only(top: 0.0, right: 0.0, bottom: 0.0, left: 0.0),
- onPressed: () {
- DatePicker.showDateTimePicker(context,
- showTitleActions: true, onChanged: (date) {}, onConfirm: (date) {
- setState(() {
- var parsedDate =
- DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(date);
- _packing.executeDate = "$parsedDate";
- executeTimeView = DateFormat("dd/MM/yyyy HH:mm").format(date);
- });
- }, currentTime: executeTime, locale: LocaleType.vi);
- },
- child: Container(
- padding:
- EdgeInsets.only(top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
- decoration: BoxDecoration(
- border: kBorderTextField,
- ),
- child: Row(
- children: [
- Expanded(
- child: Text(
- //TODO: check condition
- executeTimeView == null ? "$executeTime" : executeTimeView,
- style: TextStyle(fontSize: 14.0, color: Colors.black87),
- )),
- Icon(
- Icons.date_range,
- color: Colors.blue,
- ),
- ],
- )));
- }
-
- Widget _l1Field() {
- return TextFormField(
- keyboardType: TextInputType.numberWithOptions(decimal: true),
- inputFormatters: [
- ThousandsFormatter(
- formatter: NumberFormat("#,###.##", "es"), allowFraction: true)
- ],
- decoration: InputDecoration(labelText: "Số lượng/khối lượng loại 1"),
- controller: _l1Controller,
- validator: (String value) {
- return Validators.validNumber(value, "Số lượng/khối lượng loại 1");
- },
- onSaved: (newValue) {
- _packing.quantityLv1 = newValue.parseDoubleThousand();
- },
- );
- }
-
- Widget _l2Field() {
- return TextFormField(
- keyboardType: TextInputType.numberWithOptions(decimal: true),
- inputFormatters: [
- ThousandsFormatter(
- formatter: NumberFormat("#,###.##", "es"), allowFraction: true)
- ],
- decoration: InputDecoration(labelText: "Số lượng/khối lượng loại 2"),
- controller: _l2Controller,
- validator: (String value) {
- return Validators.validNumber(value, "Số lượng/khối lượng loại 2");
- },
- onSaved: (newValue) {
- _packing.quantityLv2 = newValue.parseDoubleThousand();
- },
- );
- }
-
- Widget _l3Field() {
- return TextFormField(
- keyboardType: TextInputType.numberWithOptions(decimal: true),
- inputFormatters: [
- ThousandsFormatter(
- formatter: NumberFormat("#,###.##", "es"), allowFraction: true)
- ],
- decoration: InputDecoration(labelText: "Số lượng/khối lượng loại 3"),
- controller: _l3Controller,
- validator: (String value) {
- return Validators.validNumber(value, "Số lượng/khối lượng loại 3");
- },
- onSaved: (newValue) {
- _packing.quantityLv3 = newValue.parseDoubleThousand();
- },
- );
- }
-
- Widget _removedQuantityField() {
- return TextFormField(
- keyboardType: TextInputType.numberWithOptions(decimal: true),
- inputFormatters: [
- ThousandsFormatter(
- formatter: NumberFormat("#,###.##", "es"), allowFraction: true)
- ],
- decoration: InputDecoration(labelText: "Số lượng/khối lượng loại bỏ"),
- controller: _removedQuantityController,
- validator: (String value) {
- return Validators.validNumber(value, "Số lượng/khối lượng loại bỏ");
- },
- onSaved: (newValue) {
- _packing.removedQuantity = newValue.parseDoubleThousand();
- },
- );
- }
-
- Widget _descriptionField() {
- return TextFormField(
- keyboardType: TextInputType.text,
- decoration: InputDecoration(labelText: "Ghi chú"),
- controller: _descriptionController,
- onSaved: (newValue) {
- _packing.description = newValue;
- },
- );
- }
-
- _actionAppBar() {
- IconButton iconButton;
- if (1 == 1) {
- iconButton = IconButton(
- icon: Icon(
- Icons.done,
- color: Colors.black,
- ),
- onPressed: () {
- FocusScopeNode currentFocus = FocusScope.of(context);
- if (!currentFocus.hasPrimaryFocus) {
- currentFocus.unfocus();
- }
- _validateInputs();
- },
- );
- return <Widget>[iconButton];
- }
- return <Widget>[Container()];
- }
-
- @override
- Widget build(BuildContext context) => KeyboardDismisser(
- gestures: [
- GestureType.onTap,
- GestureType.onPanUpdateDownDirection,
- ],
- child: Scaffold(
- key: _scaffoldKey,
- appBar: AppBar(
- centerTitle: true,
- title: Text(plot_action_packing),
- actions: _actionAppBar()),
- body: KeyboardDismisser(
- child: MultiBlocProvider(
- providers: [
- BlocProvider<ActionDetailBloc>(
- create: (context) =>
- ActionDetailBloc(repository: Repository())
- ..add(FetchData(
- isNeedFetchData: widget.isEdit,
- apiActivity: ConstCommon.apiDetailPacking,
- activityId: widget.activityId))),
- BlocProvider<MediaHelperBloc>(
- create: (context) =>
- MediaHelperBloc()..add(ChangeListMedia(items: [])),
- )
- ],
- child: Form(
- key: _formKey,
- autovalidate: _autoValidate,
- child: SingleChildScrollView(
- padding: EdgeInsets.all(8.0),
- child: BlocConsumer<ActionDetailBloc, ActionDetailState>(
- listener: (context, state) async {
- if (state is ActionDetailFailure) {
- LoadingDialog.hideLoadingDialog(context);
- } else if (state is ActionDetailSuccess) {
- LoadingDialog.hideLoadingDialog(context);
- print(state.item);
- _packing = Packing.fromJson(state.item);
- _packing.activityId = widget.activityId;
- _l1Controller.text =
- _packing.quantityLv1.formatNumtoStringDecimal();
- _l2Controller.text =
- _packing.quantityLv2.formatNumtoStringDecimal();
- _l3Controller.text =
- _packing.quantityLv3.formatNumtoStringDecimal();
- _removedQuantityController.text = _packing
- .removedQuantity
- .formatNumtoStringDecimal();
- _descriptionController.text =
- _packing.description ?? "";
-
- //select harvest
- getHarvestBloc.getHarvests((data) {
- _harvests = data;
- for (var item in _harvests) {
- if (item.id == _packing.harvestId) {
- harvestValue = item;
- break;
- }
- }
- }, (err) {});
-
- try {
- executeTime =
- DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
- .parse(_packing.executeDate);
- executeTimeView = DateFormat("dd/MM/yyyy HH:mm")
- .format(executeTime);
- } catch (_) {}
- //Show media
- if (_packing.media != null) {
- await UtilAction.cacheFiles(_packing.media)
- .then((value) {
- BlocProvider.of<MediaHelperBloc>(context)
- .add(ChangeListMedia(items: value));
- }).whenComplete(() {
- print("completed");
- });
- }
- } else if (state is ActionDetailInitial) {
- } else if (state is ActionDetailLoading) {
- LoadingDialog.showLoadingDialog(context);
- }
- },
- builder: (context, state) {
- return Column(
- children: <Widget>[
- Container(
- width: double.infinity,
- child: Text(
- "Ngày thực hiện",
- style: TextStyle(
- color: Colors.black54, fontSize: 13.0),
- ),
- ),
- _btnExecuteTimePicker(),
- SizedBox(
- height: 8.0,
- ),
- _dropdownHarvest(),
- SizedBox(
- height: 8.0,
- ),
- _l1Field(),
- SizedBox(
- height: 8.0,
- ),
- _l2Field(),
- SizedBox(
- height: 8.0,
- ),
- _l3Field(),
- SizedBox(
- height: 8.0,
- ),
- _removedQuantityField(),
- SizedBox(
- height: 8.0,
- ),
- _descriptionField(),
- SizedBox(
- height: 8.0,
- ),
- BlocBuilder<MediaHelperBloc, MediaHelperState>(
- builder: (context, state) {
- if (state is MediaHelperSuccess) {
- return WidgetMediaPicker(
- currentItems: state.items,
- onChangeFiles: (filePaths) async {
- Get.find<ChangeFileController>()
- .addAllFile(filePaths);
- });
- } else {
- return Center(
- child: CircularProgressIndicator());
- }
- }),
- ],
- );
- },
- ),
- )),
- ))));
- @override
- void dispose() {
- _l1Controller.dispose();
- _l2Controller.dispose();
- _l3Controller.dispose();
- _removedQuantityController.dispose();
- _descriptionController.dispose();
- super.dispose();
- }
- }
|