import 'package:fcs/domain/entities/custom_duty.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/localization/app_translations.dart'; import 'package:fcs/pages/main/util.dart'; import 'package:fcs/pages/widgets/input_text.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; import 'model/shipment_rate_model.dart'; class CustomEditor extends StatefulWidget { final CustomDuty custom; CustomEditor({this.custom}); @override _CustomEditorState createState() => _CustomEditorState(); } class _CustomEditorState extends State { TextEditingController _productController = new TextEditingController(); TextEditingController _feeController = new TextEditingController(); bool _isLoading = false; CustomDuty _custom = new CustomDuty(); bool _isNew = false; @override void initState() { super.initState(); if (widget.custom != null) { _custom = widget.custom; _productController.text = _custom.productType; _feeController.text = _custom.fee.toString(); } else { _isNew = true; } } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { final productBox = InputText( labelTextKey: 'rate.cutom.product_type', iconData: FontAwesomeIcons.weightHanging, controller: _productController); final feeBox = InputText( labelTextKey: 'rate.custom.fee', iconData: Icons.attach_money, controller: _feeController); return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( appBar: AppBar( centerTitle: true, leading: new IconButton( icon: new Icon( CupertinoIcons.back, ), onPressed: () => Navigator.of(context).pop(), ), backgroundColor: primaryColor, title: Text(AppTranslations.of(context).text("rate.custom.form.title")), actions: [ IconButton( icon: Icon(Icons.delete), onPressed: _delete, ) ], ), body: Container( padding: EdgeInsets.all(18), child: Column( children: [ Expanded( child: ListView( children: [ productBox, feeBox, SizedBox(height: 30), ], ), ), fcsButton(context, getLocalString(context, "btn.save"), callack: _save), SizedBox(height: 10) ], ), ), ), ); } _save() async { setState(() { _isLoading = true; }); try { var shipmentRateModel = Provider.of(context, listen: false); CustomDuty _customduty = CustomDuty( productType: _productController.text, fee: double.parse(_feeController.text)); print('_customduty => $_customduty'); if (_isNew) { await shipmentRateModel.addCustomDuty(_customduty); } else { _customduty.id = widget.custom.id; await shipmentRateModel.updateCustomDuty(_customduty); } Navigator.pop(context); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { setState(() { _isLoading = false; }); } } _delete() { showConfirmDialog( context, "rate.custom.edit.delete.confirm", _deleteCustomDuty); } _deleteCustomDuty() async { setState(() { _isLoading = true; }); try { var shipmentRateModel = Provider.of(context, listen: false); await shipmentRateModel.deleteCustomDuty(widget.custom.id); Navigator.pop(context); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { setState(() { _isLoading = false; }); } } }