import 'package:fcs/domain/entities/fcs_shipment.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/localization/app_translations.dart'; import 'package:fcs/pages/fcs_shipment/model/fcs_shipment_model.dart'; import 'package:fcs/pages/main/model/language_model.dart'; import 'package:fcs/pages/main/model/main_model.dart'; import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/input_text.dart'; import 'package:fcs/pages/widgets/label_widgets.dart'; import 'package:fcs/pages/widgets/local_text.dart'; import 'package:fcs/pages/widgets/popupmenu.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter_icons/flutter_icons.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:flutter/material.dart'; import '../main/util.dart'; class FcsShipmentEditor extends StatefulWidget { final FcsShipment shipment; FcsShipmentEditor({this.shipment}); @override _FcsShipmentEditorState createState() => _FcsShipmentEditorState(); } class _FcsShipmentEditorState extends State { var dateFormatter = new DateFormat('dd MMM yyyy'); TextEditingController _shipmentNumberController = new TextEditingController(); TextEditingController _cutoffDateController = new TextEditingController(); TextEditingController _arrivalDateController = new TextEditingController(); TextEditingController _departureDateControler = new TextEditingController(); TextEditingController _consigneeController = new TextEditingController(); TextEditingController _portController = new TextEditingController(); TextEditingController _destinationController = new TextEditingController(); TextEditingController _statusController = new TextEditingController(); TextEditingController _remarkController = new TextEditingController(); FcsShipment _shipment = new FcsShipment(); bool _isLoading = false; String _currentShipment; @override void initState() { super.initState(); if (widget.shipment != null) { _shipment = widget.shipment; _shipmentNumberController.text = _shipment.shipmentNumber; _arrivalDateController.text = dateFormatter.format(_shipment.arrivalDate); _departureDateControler.text = dateFormatter.format(_shipment.departureDate); _statusController.text = _shipment.status; } } @override void dispose() { super.dispose(); } Widget showShipmentNumber(BuildContext context) { return Container( padding: EdgeInsets.only(top: 10), child: Row( children: [ Icon(Icons.text_rotation_none), Padding( padding: const EdgeInsets.only(right: 8.0), child: labeledText( context, _shipmentNumberController.text, "shipment.number"), ), ], ), ); } Widget showShipmentTypes( BuildContext context, FcsShipmentModel shipmentModel) { return Row( mainAxisSize: MainAxisSize.max, children: [ Icon(MaterialCommunityIcons.box_shadow), SizedBox( width: 10, ), new Flexible( child: Container( width: 200.0, child: DropdownButton( value: _currentShipment, isExpanded: true, hint: Text( 'Select shipment type', ), onChanged: changedDropDown, items: shipmentModel.shipmentType .map>((String shipment) { return new DropdownMenuItem( value: shipment, child: new Text(shipment, style: new TextStyle(color: Colors.black87, fontSize: 17)), ); }).toList(), ), ), ), ], ); } void changedDropDown(selected) { setState(() { _currentShipment = selected; }); } @override Widget build(BuildContext context) { var shipmentModel = Provider.of(context); var languageModel = Provider.of(context); final createBtn = fcsButton( context, getLocalString(context, "FCSshipment.create"), ); final updateBtn = fcsButton( context, getLocalString(context, "FCSshipment.update"), ); return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( appBar: AppBar( centerTitle: true, shadowColor: Colors.transparent, leading: new IconButton( icon: new Icon(Icons.close, color: primaryColor), onPressed: () => Navigator.of(context).pop(), ), backgroundColor: Colors.white, title: LocalText( context, "FCSshipment.form.title", color: primaryColor, fontSize: 18, ), actions: [menuPopWidget(context)], ), body: Card( child: Column( children: [ Expanded( child: Padding( padding: const EdgeInsets.all(10.0), child: ListView(children: [ // _showCustomerData(mainModel.customer), widget.shipment == null ? InputText( labelTextKey: "FCSshipment.number", iconData: Ionicons.ios_airplane, controller: _shipmentNumberController, ) : DisplayText( iconData: Ionicons.ios_airplane, labelText: "FCSshipment.number", text: _shipmentNumberController.text), widget.shipment == null ? InputText( labelTextKey: "FCSshipment.cutoff_date", iconData: Icons.date_range, controller: _cutoffDateController, ) : Container(), InputText( labelTextKey: "FCSshipment.ETA", iconData: Icons.date_range, controller: _arrivalDateController, ), InputText( labelTextKey: "FCSshipment.departure_date", iconData: Icons.date_range, controller: _departureDateControler, ), widget.shipment == null ? DropdownButtonFormField( decoration: InputDecoration( enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor)), fillColor: Colors.white, labelStyle: languageModel.isEng ? labelStyle : labelStyleMM, labelText: AppTranslations.of(context) .text('FCSshipment.shipment_type'), icon: Icon(Ionicons.ios_airplane, color: primaryColor)), items: shipmentModel.shipmentType .map((e) => DropdownMenuItem(child: Text(e), value: e)) .toList(), onChanged: (selected) => { setState(() { _currentShipment = selected; }) }, ) : Container(), widget.shipment == null ? InputText( labelTextKey: 'FCSshipment.consignee', iconData: Icons.work, controller: _consigneeController) : Container(), widget.shipment == null ? InputText( labelTextKey: 'FCSshipment.port_of_loading', iconData: FontAwesomeIcons.ship, controller: _portController) : Container(), widget.shipment == null ? InputText( labelTextKey: 'FCSshipment.final_destination', iconData: MaterialCommunityIcons.location_enter, controller: _destinationController) : Container(), widget.shipment == null ? Container() : Container( padding: EdgeInsets.only(top: 5), child: DisplayText( text: _statusController.text, iconData: Icons.av_timer, labelText: 'FCSshipment.status', )), widget.shipment == null ? Container() : InputText( labelTextKey: 'FCSshipment.remark', iconData: MaterialCommunityIcons.note, controller: _remarkController), ]), )), widget.shipment == null ? createBtn : updateBtn, SizedBox(height: 15) ], ), ), ), ); } Widget menuPopWidget(BuildContext context) { return PopupMenuButton( elevation: 3.2, icon: Icon(Icons.more_vert, color: primaryColor), tooltip: 'This is tooltip', onSelected: (choice) { if (choice.id == 1) { Navigator.pop(context); } else if (choice.id == 2) { Navigator.pop(context); } else if (choice.id == 3) { Navigator.pop(context); } else if (choice.id == 4) { Navigator.pop(context); } }, itemBuilder: (BuildContext context) { List menuPopup = [ PopupMenu( id: 3, status: "FCSshipment.commercial_invoice", ), PopupMenu(id: 2, status: "FCSshipment.packing_list"), PopupMenu( id: 5, status: "FCSshipment.dms", ), PopupMenu( id: 4, status: "FCSshipment.cargo_manifest", ), ]; return menuPopup.map((PopupMenu choice) { return PopupMenuItem( value: choice, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: EdgeInsets.only(left: 15), child: LocalText( context, choice.status, color: primaryColor, )), ], ), ); }).toList(); }); } }