import 'package:fcs/model/shipment_rate_model.dart'; import 'package:fcs/pages_fcs/cargo_editor.dart'; import 'package:fcs/vo/custom.dart'; import 'package:fcs/vo/discount.dart'; import 'package:fcs/vo/pickup.dart'; import 'package:fcs/vo/rate.dart'; import 'package:fcs/widget/bottom_up_page_route.dart'; import 'package:fcs/widget/my_data_table.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; import 'package:fcs/widget/localization/app_translations.dart'; import 'package:flutter/material.dart'; import 'package:fcs/widget/progress.dart'; import '../fcs/common/helpers/theme.dart'; import 'custom_editor.dart'; import 'discount_by_weight_editor.dart'; import '../fcs/common/pages/util.dart'; class ShipmentRatesEdit extends StatefulWidget { final PickUp pickUp; ShipmentRatesEdit({this.pickUp}); @override _ShipmentRatesEditState createState() => _ShipmentRatesEditState(); } class _ShipmentRatesEditState extends State { TextEditingController _addressEditingController = new TextEditingController(); TextEditingController _fromTimeEditingController = new TextEditingController(); TextEditingController _toTimeEditingController = new TextEditingController(); TextEditingController _noOfPackageEditingController = new TextEditingController(); TextEditingController _weightEditingController = new TextEditingController(); PickUp _pickUp; bool _isLoading = false; @override void initState() { super.initState(); if (widget.pickUp != null) { _pickUp = widget.pickUp; _addressEditingController.text = _pickUp.address; _fromTimeEditingController.text = _pickUp.fromTime; _toTimeEditingController.text = _pickUp.toTime; _noOfPackageEditingController.text = _pickUp.numberOfPackage.toString(); _weightEditingController.text = _pickUp.weight.toString(); } } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { var shipmentRateModel = Provider.of(context); return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( appBar: AppBar( centerTitle: true, leading: new IconButton( icon: new Icon( Icons.close, ), onPressed: () => Navigator.of(context).pop(), ), backgroundColor: primaryColor, title: Text(AppTranslations.of(context).text("rate.edit.title")), ), body: Container( padding: EdgeInsets.all(18), child: Column( children: [ Expanded( child: ListView( children: [ fcsInput("Min Weight for Free delivery within Yangon", FontAwesomeIcons.weightHanging, value: "10"), fcsInput("Delivery fees", Icons.attach_money, value: "5"), SizedBox(height: 10), fcsInput("Volumetric Ratio", Icons.attach_money, value: "166.36"), SizedBox(height: 10), ExpansionTile( title: Text( 'Cargo Types', style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold), ), children: [ Container( child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: MyDataTable( headingRowHeight: 40, columnSpacing: 50, columns: [ MyDataColumn( label: Text("Cargo Type", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), MyDataColumn( label: Text("Rate", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), MyDataColumn( label: Text("Delete", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), ], rows: getCargoRows(shipmentRateModel.rates), ), ), ), Container( padding: EdgeInsets.only(top: 20, bottom: 15, right: 15), child: Align( alignment: Alignment.bottomRight, child: Container( width: 120, height: 40, child: FloatingActionButton.extended( materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, icon: Icon(Icons.add), onPressed: () { Navigator.push( context, BottomUpPageRoute(CargoEditor()), ); }, label: Text( 'Add Cargo', style: TextStyle(fontSize: 12), ), backgroundColor: primaryColor, ), ), ), ) ], ), ExpansionTile( title: Text( 'Custom Duties', style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold), ), children: [ Container( child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: MyDataTable( headingRowHeight: 40, columnSpacing: 50, columns: [ MyDataColumn( label: Text("Produt Type", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), MyDataColumn( label: Text("Fee", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), MyDataColumn( label: Text("Delete", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), ], rows: getCustomsRows(shipmentRateModel.customs), ), ), ), Container( padding: EdgeInsets.only(top: 20, bottom: 15, right: 15), child: Align( alignment: Alignment.bottomRight, child: Container( width: 120, height: 40, child: FloatingActionButton.extended( materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, icon: Icon(Icons.add), onPressed: () { Navigator.push( context, BottomUpPageRoute(CustomEditor()), ); }, label: Text( 'Add Custom\nDuty', style: TextStyle(fontSize: 12), ), backgroundColor: primaryColor, ), ), ), ) ], ), ExpansionTile( title: Text( 'Discounts by weight', style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold), ), children: [ Container( child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: MyDataTable( headingRowHeight: 40, columnSpacing: 30, columns: [ MyDataColumn( label: Text("Weight", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), MyDataColumn( label: Text("Discount Rate", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), MyDataColumn( label: Text("Delete", style: TextStyle( fontSize: 15, color: Colors.grey[600]))), ], rows: getDiscounts( shipmentRateModel.discountsByWeight), ), ), ), Container( padding: EdgeInsets.only(top: 20, bottom: 15, right: 15), child: Align( alignment: Alignment.bottomRight, child: Container( width: 130, height: 40, child: FloatingActionButton.extended( materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, icon: Icon(Icons.add), onPressed: () { Navigator.push( context, BottomUpPageRoute(DiscountByWeightEditor()), ); }, label: Text( 'Add Discount', style: TextStyle(fontSize: 12), ), backgroundColor: primaryColor, ), ), ), ) ], ), ], ), ), fcsButton(context, "Save", callack: () { Navigator.pop(context); }), SizedBox(height: 10) ], ), ), ), ); } List getCargoRows(List rates) { return rates.map((r) { return MyDataRow( onSelectChanged: (selected) { Navigator.push( context, BottomUpPageRoute(CargoEditor(rate: r)), ); }, cells: [ MyDataCell( new Text( r.description, style: textStyle, ), ), MyDataCell( new Text( r.price.toString(), style: textStyle, ), ), MyDataCell(IconButton(icon: Icon(Icons.delete), onPressed: null)), ], ); }).toList(); } List getCustomsRows(List customs) { return customs.map((c) { return MyDataRow( onSelectChanged: (selected) { Navigator.push( context, BottomUpPageRoute(CustomEditor(custom: c)), ); }, cells: [ MyDataCell( new Text( c.productType, style: textStyle, ), ), MyDataCell( new Text( c.fee.toString(), style: textStyle, ), ), MyDataCell(IconButton(icon: Icon(Icons.delete), onPressed: null)), ], ); }).toList(); } List getDiscounts(List discounts) { return discounts.map((d) { return MyDataRow( onSelectChanged: (selected) { // Navigator.push( // context, // BottomUpPageRoute(CargoEditor(rate: r)), // ); }, cells: [ MyDataCell( new Text( "${d.weight} lb", style: textStyle, ), ), MyDataCell( Center( child: new Text( d.discountRate.toString(), style: textStyle, ), ), ), MyDataCell(IconButton(icon: Icon(Icons.delete), onPressed: null)), ], ); }).toList(); } _row(String desc, String price, String unit) { return Container( padding: EdgeInsets.only(left: 25, top: 5, bottom: 5), child: Row( children: [ Text('$desc ', style: TextStyle(fontSize: 15)), Spacer(), Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Padding( padding: const EdgeInsets.only(bottom: 3.0), child: Text( '$price', style: TextStyle(color: primaryColor, fontSize: 14), ), ), Text( '$unit', style: TextStyle(color: Colors.grey, fontSize: 14), ), ], ), SizedBox( width: 50, ), ], )); } }