import 'package:fcs/domain/entities/box.dart'; import 'package:fcs/domain/entities/cargo.dart'; import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/domain/vo/delivery_address.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/localization/app_translations.dart'; import 'package:fcs/pages/delivery_address/delivery_address_list.dart'; import 'package:fcs/pages/delivery_address/delivery_address_row.dart'; import 'package:fcs/pages/delivery_address/model/delivery_address_model.dart'; import 'package:fcs/pages/widgets/bottom_up_page_route.dart'; import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/local_text.dart'; import 'package:fcs/pages/widgets/my_data_table.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/material.dart'; import 'package:flutter_icons/flutter_icons.dart'; import 'package:provider/provider.dart'; import '../main/util.dart'; class PickupBoxEditor extends StatefulWidget { final Box box; PickupBoxEditor({this.box}); @override _PickupBoxEditorState createState() => _PickupBoxEditorState(); } class _PickupBoxEditorState extends State { Box _box; bool _isLoading = false; bool isNew; bool isMixBox = false; DeliveryAddress _deliveryAddress = new DeliveryAddress(); @override void initState() { super.initState(); if (widget.box != null) { _box = widget.box; _deliveryAddress = _box.shippingAddress; isNew = false; } else { List packages = [ // PackageModel.packages[0], // PackageModel.packages[1], // PackageModel.packages[2] ]; List _cargoTypes = [ Cargo(type: 'General Cargo', weight: 25), Cargo(type: 'Medicine', weight: 20), Cargo(type: 'Dangerous Cargo', weight: 30) ]; var shipmentModel = Provider.of(context, listen: false); _deliveryAddress = shipmentModel.deliveryAddresses[1]; isNew = true; _box = Box( rate: 0, weight: 75, width: 0, height: 0, length: 0, packages: packages, cargoTypes: _cargoTypes, shipmentWeight: 0); } } @override void dispose() { super.dispose(); } @override Widget build(BuildContext 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("package.edit.title")), ), body: Card( child: Column( children: [ Expanded( child: ListView( children: [ ExpansionTile( title: Text( 'Cargo Types', style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold), ), children: [ Padding( padding: const EdgeInsets.only(left: 20.0, right: 20), child: TextFormField( initialValue: _box.weight.toString(), textAlign: TextAlign.end, decoration: InputDecoration( fillColor: Colors.white, labelText: 'Actual Weight', filled: true, icon: Icon(MaterialCommunityIcons.weight, color: primaryColor), )), ), Container( padding: EdgeInsets.only(top: 10), child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: MyDataTable( headingRowHeight: 40, columnSpacing: 120, columns: [ MyDataColumn( label: LocalText( context, "cargo.type", color: Colors.grey, ), ), MyDataColumn( label: LocalText( context, "cargo.weight", color: Colors.grey, ), ), ], rows: getCargoRows(context), ), ), ), Container( padding: EdgeInsets.only(top: 20), child: Align( alignment: Alignment.bottomRight, child: FloatingActionButton.extended( icon: Icon(Icons.add), label: Text("Add Cargo"), backgroundColor: primaryColor, onPressed: () { // Navigator.of(context).push( // BottomUpPageRoute(PackageAddition())); }, ), ), ), SizedBox(height: 25), ], ), ExpansionTile( title: Text( 'Box Dimension', style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold), ), children: [ Padding( padding: const EdgeInsets.only(left: 20.0, right: 20), child: fcsInputReadOnly( "Shipment Weight", MaterialCommunityIcons.weight, value: _box.shipmentWeight.toString()), ), Padding( padding: const EdgeInsets.only(left: 20.0, right: 20), child: TextFormField( initialValue: _box.width.toString(), textAlign: TextAlign.end, decoration: InputDecoration( fillColor: Colors.white, labelText: 'Width', filled: true, icon: Icon(FontAwesome.arrow_circle_right, color: primaryColor), )), ), Padding( padding: const EdgeInsets.only(left: 20.0, right: 20), child: TextFormField( initialValue: _box.height.toString(), textAlign: TextAlign.end, decoration: InputDecoration( fillColor: Colors.white, labelText: 'Height', filled: true, icon: Icon(FontAwesome.arrow_circle_up, color: primaryColor), )), ), Padding( padding: const EdgeInsets.only(left: 20.0, right: 20), child: TextFormField( initialValue: _box.length.toString(), textAlign: TextAlign.end, decoration: InputDecoration( fillColor: Colors.white, labelText: 'Length', filled: true, icon: Icon(FontAwesome.arrow_circle_left, color: primaryColor), )), ), SizedBox(height: 25), ], ), makeLocation(context, _deliveryAddress), ], ), ), widget.box == null ? Align( alignment: Alignment.bottomCenter, child: Center( child: Container( width: 250, child: FlatButton( child: Text('Create New Package'), color: primaryColor, textColor: Colors.white, onPressed: () { Navigator.pop(context); }, ), ))) : Container( child: Column( children: [ Align( alignment: Alignment.bottomCenter, child: Center( child: Container( width: 250, child: FlatButton( child: Text('Update Package'), color: primaryColor, textColor: Colors.white, onPressed: () { Navigator.pop(context); }, ), ))), ], )) ], ), ), ), ); } Widget makeLocation(BuildContext context, DeliveryAddress deliveryAddress) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Expanded( child: DisplayText( labelTextKey: "shipment.box.delivery", iconData: MaterialCommunityIcons.truck_fast, ), ), Chip( label: InkWell( onTap: () async { DeliveryAddress d = await Navigator.push( context, BottomUpPageRoute(DeliveryAddressList( forSelection: true, )), ); setState(() { this._deliveryAddress = d; }); }, child: LocalText(context, "delivery_address.change_address", color: primaryColor), )) ], ), Padding( padding: const EdgeInsets.only(left: 28.0), child: deliveryAddress == null ? Container() : DeliveryAddressRow( key: ValueKey(deliveryAddress.id), deliveryAddress: deliveryAddress), ), ], ); } List getCargoRows(BuildContext context) { if (_box == null || _box.cargoTypes == null) { return []; } return _box.cargoTypes.map((c) { return MyDataRow( onSelectChanged: (bool selected) {}, cells: [ MyDataCell(new Text( c.type == null ? "" : c.type, style: textStyle, )), MyDataCell( new Text(c.weight == null ? "0" : c.weight.toString(), style: textStyle), ), ], ); }).toList(); } }