import 'package:fcs/domain/entities/cargo_type.dart'; import 'package:fcs/domain/entities/custom_duty.dart'; import 'package:fcs/domain/entities/discount.dart'; import 'package:fcs/domain/entities/discount_by_weight.dart'; import 'package:fcs/domain/entities/rate.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/localization/app_translations.dart'; import 'package:fcs/pages/rates/model/shipment_rate_model.dart'; import 'package:fcs/pages/widgets/bottom_up_page_route.dart'; import 'package:fcs/pages/widgets/input_text.dart'; import 'package:fcs/pages/widgets/my_data_table.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; import 'package:flutter/material.dart'; import '../main/util.dart'; import 'cargo_editor.dart'; import 'custom_editor.dart'; import 'discount_by_weight_editor.dart'; class ShipmentRatesEdit extends StatefulWidget { ShipmentRatesEdit(); @override _ShipmentRatesEditState createState() => _ShipmentRatesEditState(); } class _ShipmentRatesEditState extends State { bool _isLoading = false; TextEditingController _minWeight = new TextEditingController(); TextEditingController _deliveryFee = new TextEditingController(); TextEditingController _volumetricRatio = new TextEditingController(); bool _isNew = false; @override void initState() { super.initState(); _minWeight.text = "10"; _deliveryFee.text = "5"; _volumetricRatio.text = "166.36"; } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { var shipmentRateModel = Provider.of(context); final minWigBox = InputText( labelTextKey: 'rate.min_weight', iconData: FontAwesomeIcons.weightHanging, controller: _minWeight); final feeBox = InputText( labelTextKey: 'rate.delivery_fee', iconData: Icons.attach_money, controller: _deliveryFee); final ratioBox = InputText( labelTextKey: 'rate.volumetric_ratio', iconData: Icons.attach_money, controller: _volumetricRatio); 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.edit.title")), ), body: Container( padding: EdgeInsets.all(18), child: Column( children: [ Expanded( child: ListView( children: [ minWigBox, feeBox, ratioBox, 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.rate.cargoTypes), // ), // ), // ), // 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, // CupertinoPageRoute( // builder: (context) => 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.rate.customDuties), // ), // ), // ), // 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, // CupertinoPageRoute( // builder: (context) => 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.rate.discountByWeights), // ), // ), // ), // 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, // CupertinoPageRoute( // builder: (context) => // DiscountByWeightEditor()), // ); // }, // label: Text( // 'Add Discount', // style: TextStyle(fontSize: 12), // ), // backgroundColor: primaryColor, // ), // ), // ), // ) // ], // ), ], ), ), fcsButton(context, getLocalString(context, "btn.save"), callack: _save), SizedBox(height: 10) ], ), ), ), ); } _save() async { setState(() { _isLoading = true; }); try { var shipmentRateModel = Provider.of(context, listen: false); Rate _rate = Rate( deliveryFee: double.parse(_deliveryFee.text), freeDeliveryWeight: double.parse(_minWeight.text), volumetricRatio: double.parse(_volumetricRatio.text)); await shipmentRateModel.updateRate(_rate); Navigator.pop(context); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { setState(() { _isLoading = false; }); } } List getCargoRows(List cargos) { return cargos.map((r) { return MyDataRow( onSelectChanged: (selected) { Navigator.push( context, CupertinoPageRoute(builder: (context) => CargoEditor(cargo: r)), ); }, cells: [ MyDataCell( new Text( r.name, style: textStyle, ), ), MyDataCell( new Text( r.rate.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, CupertinoPageRoute(builder: (context) => 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, // CupertinoPageRoute(builder: (context) => CargoEditor(rate: r)), // ); }, cells: [ MyDataCell( new Text( "${d.weight} lb", style: textStyle, ), ), MyDataCell( Center( child: new Text( d.discount.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, ), ], )); } }