Files
fcs/lib/pages/fcs_shipment/fcs_shipment_editor.dart
2020-10-07 18:19:12 +06:30

316 lines
11 KiB
Dart

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<FcsShipmentEditor> {
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: <Widget>[
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: <Widget>[
Icon(MaterialCommunityIcons.box_shadow),
SizedBox(
width: 10,
),
new Flexible(
child: Container(
width: 200.0,
child: DropdownButton<String>(
value: _currentShipment,
isExpanded: true,
hint: Text(
'Select shipment type',
),
onChanged: changedDropDown,
items: shipmentModel.shipmentType
.map<DropdownMenuItem<String>>((String shipment) {
return new DropdownMenuItem<String>(
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<FcsShipmentModel>(context);
var languageModel = Provider.of<LanguageModel>(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: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: ListView(children: <Widget>[
// _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<PopupMenu>(
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<PopupMenu> menuPopup = <PopupMenu>[
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<PopupMenu>(
value: choice,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
padding: EdgeInsets.only(left: 15),
child: LocalText(
context,
choice.status,
color: primaryColor,
)),
],
),
);
}).toList();
});
}
}