From 34385c4295cb771e88ffe562a7471e675275c96a Mon Sep 17 00:00:00 2001 From: Thinzar Win Date: Tue, 13 Oct 2020 15:45:01 +0630 Subject: [PATCH] update boxes --- lib/pages/box/box_editor.dart | 535 +++++++++++++++-------------- lib/pages/box/model/box_model.dart | 32 +- 2 files changed, 285 insertions(+), 282 deletions(-) diff --git a/lib/pages/box/box_editor.dart b/lib/pages/box/box_editor.dart index d053605..edf261b 100644 --- a/lib/pages/box/box_editor.dart +++ b/lib/pages/box/box_editor.dart @@ -7,17 +7,22 @@ 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/main/model/language_model.dart'; +import 'package:fcs/pages/main/model/main_model.dart'; import 'package:fcs/pages/main/util.dart'; import 'package:fcs/pages/package/model/package_model.dart'; import 'package:fcs/pages/user_search/user_serach.dart'; import 'package:fcs/pages/widgets/bottom_up_page_route.dart'; +import 'package:fcs/pages/widgets/defalut_delivery_address.dart'; +import 'package:fcs/pages/widgets/delivery_address_selection.dart'; import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/fcs_id_icon.dart'; import 'package:fcs/pages/widgets/input_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:fcs/pages/widgets/title_with_add_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_icons/flutter_icons.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; @@ -49,6 +54,9 @@ class _BoxEditorState extends State { User user; String selectShipmentNumber; List _packages = []; + List _cargoTypes = []; + double volumetricRatio = 0; + double shipmentWeight = 0; @override void initState() { @@ -57,47 +65,48 @@ class _BoxEditorState extends State { _packages = [ packageModel.packages[0], packageModel.packages[1], - packageModel.packages[2], - packageModel.packages[8] ]; _packages.forEach((p) { p.isChecked = false; }); + volumetricRatio = + Provider.of(context, listen: false).setting.volumetricRatio; + _lengthController.addListener(_calShipmentWeight); + _widthController.addListener(_calShipmentWeight); + _heightController.addListener(_calShipmentWeight); + if (widget.box != null) { _box = widget.box; _deliveryAddress = _box.shippingAddress; - isNew = false; + _cargoTypes = _box.cargoTypes; selectShipmentNumber = _box.shipmentNumber; _widthController.text = _box.width.toString(); _heightController.text = _box.height.toString(); _lengthController.text = _box.length.toString(); + isNew = false; } else { - List _cargoTypes = [ - Cargo(type: 'General Cargo', weight: 25), + _cargoTypes = [ + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]; - _deliveryAddress = DeliveryAddress( - fullName: 'U Nyi Nyi', - addressLine1: '154-19 64th Ave.', - addressLine2: 'Flushing', - city: 'NY', - state: 'NY', - phoneNumber: '+1 (292)215-2247'); - + var shipmentModel = + Provider.of(context, listen: false); + _deliveryAddress = shipmentModel.defalutAddress; isNew = true; - _box = Box( - rate: 0, - weight: 75, - width: 0, - height: 0, - length: 0, - cargoTypes: _cargoTypes, - shipmentWeight: 0); } } + _calShipmentWeight() { + double l = double.parse(_lengthController.text, (s) => 0); + double w = double.parse(_widthController.text, (s) => 0); + double h = double.parse(_heightController.text, (s) => 0); + setState(() { + shipmentWeight = l * w * h / volumetricRatio; + }); + } + @override void dispose() { super.dispose(); @@ -149,7 +158,7 @@ class _BoxEditorState extends State { var shipmentBox = Container( child: Padding( - padding: const EdgeInsets.only(left: 10.0), + padding: const EdgeInsets.only(left: 10.0, right: 10), child: DropdownButtonFormField( value: selectShipmentNumber, decoration: InputDecoration( @@ -247,7 +256,7 @@ class _BoxEditorState extends State { child: Row( children: [ Container( - width: 50, + width: 40, ), Expanded( child: LocalText(context, 'box.tracking.id', color: Colors.grey), @@ -301,14 +310,6 @@ class _BoxEditorState extends State { }).toList(); } - final actualWeightBox = Container( - padding: EdgeInsets.only(left: 10), - child: DisplayText( - text: _box.weight != null ? _box.weight.toString() : "", - labelTextKey: "box.actual_weight", - iconData: FontAwesomeIcons.weightHanging, - )); - final cargoTitle = Container( padding: EdgeInsets.only(left: 15, right: 0.0, top: 20), child: Row( @@ -316,13 +317,21 @@ class _BoxEditorState extends State { Expanded( child: LocalText(context, 'cargo.type', color: Colors.grey), ), - LocalText(context, 'cargo.weight', color: Colors.grey), + Container( + padding: EdgeInsets.only(right: 20), + child: LocalText(context, 'cargo.weight', color: Colors.grey)), ], ), ); List getCargoRowList() { - return _box.cargoTypes.asMap().entries.map((c) { + if (_cargoTypes == null) { + return []; + } + int total = 0; + + var rows = _cargoTypes.asMap().entries.map((c) { + total += c.value.weight; return InkWell( onTap: () { Navigator.push( @@ -334,7 +343,7 @@ class _BoxEditorState extends State { color: Colors.grey[50].withOpacity(0.2), child: Container( padding: EdgeInsets.only( - left: 15.0, right: 10.0, top: 15.0, bottom: 15.0), + left: 15.0, right: 0.0, top: 0.0, bottom: 0.0), decoration: BoxDecoration( border: Border( bottom: BorderSide(color: Colors.grey[350], width: 1), @@ -347,9 +356,26 @@ class _BoxEditorState extends State { c.value.type, style: textStyle, )), - new Text( - c.value.weight == null ? "0" : c.value.weight.toString(), - style: textStyle, + Row( + children: [ + new Text( + c.value.weight == null + ? "0" + : c.value.weight.toString(), + style: textStyle, + ), + IconButton( + icon: Icon( + Icons.remove_circle, + color: primaryColor, + ), + onPressed: () { + setState(() { + _cargoTypes.remove(c.value); + }); + }, + ) + ], ) ], ), @@ -357,49 +383,91 @@ class _BoxEditorState extends State { ), ); }).toList(); + + var totalRow = InkWell( + child: Container( + color: Colors.grey[50].withOpacity(0.2), + child: Container( + padding: + EdgeInsets.only(left: 15.0, right: 10.0, top: 15.0, bottom: 15.0), + child: Row( + children: [ + Expanded( + child: new Text( + "Total Weight", + style: TextStyle(fontWeight: FontWeight.bold), + )), + Padding( + padding: const EdgeInsets.only(right: 40.0), + child: Align( + alignment: Alignment.centerRight, + child: new Text( + total.toString(), + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + ) + ], + ), + ), + )); + + rows.add(totalRow); + return rows; } final shipmentWeightBox = Container( padding: EdgeInsets.only(left: 10), child: DisplayText( - text: - _box.shipmentWeight != null ? _box.shipmentWeight.toString() : "", + text: shipmentWeight != null ? shipmentWeight.toStringAsFixed(0) : "", labelTextKey: "box.shipment_weight", - iconData: FontAwesomeIcons.weightHanging, + iconData: MaterialCommunityIcons.weight, )); - final widthBox = InputText( - labelTextKey: 'box.width', - iconData: FontAwesomeIcons.arrowCircleRight, - controller: _widthController); + final widthBox = Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: InputText( + labelTextKey: 'box.width', + iconData: FontAwesomeIcons.arrowCircleRight, + controller: _widthController)); - final heightBox = InputText( - labelTextKey: 'box.height', - iconData: FontAwesomeIcons.arrowAltCircleUp, - controller: _heightController); + final heightBox = Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: InputText( + labelTextKey: 'box.height', + iconData: FontAwesomeIcons.arrowAltCircleUp, + controller: _heightController)); - final lengthBox = InputText( - labelTextKey: 'box.length', - iconData: FontAwesomeIcons.arrowCircleUp, - controller: _lengthController); + final lengthBox = Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: InputText( + labelTextKey: 'box.length', + iconData: FontAwesomeIcons.arrowCircleUp, + controller: _lengthController)); - final createBtn = fcsButton( - context, - getLocalString(context, 'box.create.btn'), - callack: () {}, - ); + final createBtn = Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: fcsButton( + context, + getLocalString(context, 'box.create.btn'), + callack: () {}, + )); - final completeBtn = fcsButton( - context, - getLocalString(context, 'box.complete.btn'), - callack: () {}, - ); + final completeBtn = Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: fcsButton( + context, + getLocalString(context, 'box.complete.btn'), + callack: () {}, + )); - final deliveryBtn = fcsButton( - context, - getLocalString(context, 'box.deliver.btn'), - callack: () {}, - ); + final deliveryBtn = Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: fcsButton( + context, + getLocalString(context, 'box.deliver.btn'), + callack: () {}, + )); return LocalProgress( inAsyncCall: _isLoading, @@ -426,52 +494,44 @@ class _BoxEditorState extends State { color: primaryColor, ), ), - body: Padding( - padding: const EdgeInsets.only(left: 12.0, right: 12), - child: ListView( - shrinkWrap: true, - children: [ - widget.box == null - ? Container() - : Center(child: nameWidget(_box.packageNumber)), - Center( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: LocalText( - context, - "box.shipment_info", - color: primaryColor, - fontSize: 16, - fontWeight: FontWeight.w700, - ), + body: ListView( + shrinkWrap: true, + children: [ + widget.box == null + ? Container() + : Center(child: nameWidget(_box.packageNumber)), + Container( + padding: EdgeInsets.only(top: 10), + child: TitleWithAddButton( + titleKey: "box.shipment_info", + ), + ), + Column( + children: [ + shipmentBox, + SizedBox( + height: 10, ), - ), - Column( - children: [ - shipmentBox, - SizedBox( - height: 10, - ), - fcsIDBox, - phoneNumberBox, - namebox, - mixBox, - ], - ), - Divider(), - Center( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: LocalText( - context, - "box.packages", - color: primaryColor, - fontSize: 16, - fontWeight: FontWeight.w700, - ), + fcsIDBox, + phoneNumberBox, + namebox, + mixBox, + SizedBox( + height: 10, ), + ], + ), + Divider(), + Container( + padding: EdgeInsets.only(top: 10, left: 10), + child: TitleWithAddButton( + iconData: Octicons.package, + titleKey: "box.packages", ), - Column( + ), + Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: Column( children: [ packageTitle, Divider( @@ -480,174 +540,117 @@ class _BoxEditorState extends State { Column( children: getPackageRowList(), ), - SizedBox(height: 15), + SizedBox(height: 10), ], ), - Divider(), - Center( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: LocalText( - context, - "box.cargo_type", - color: primaryColor, - fontSize: 16, - fontWeight: FontWeight.w700, - ), - ), - ), - Column( + ), + Divider(), + Container( + padding: EdgeInsets.only(left: 10), + child: TitleWithAddButton( + iconData: MaterialCommunityIcons.briefcase_check, + titleKey: "box.cargo_type", + onTap: () async { + Cargo cargo = await Navigator.push( + context, BottomUpPageRoute(CargoTypeEditor())); + if (cargo != null) { + setState(() { + _box.cargoTypes.add(cargo); + }); + } + }), + ), + Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: Column( children: [ - actualWeightBox, cargoTitle, Divider( color: Colors.grey[400], ), Column( - children: _box == null || _box.cargoTypes == null - ? [] - : getCargoRowList(), - ), - Container( - padding: EdgeInsets.only(top: 25), - child: Align( - alignment: Alignment.bottomRight, - child: FloatingActionButton.extended( - icon: Icon(Icons.add), - heroTag: "add cargo", - label: LocalText( - context, - "box.add_cargo", - color: Colors.white, - ), - backgroundColor: primaryColor, - onPressed: () { - Navigator.push( - context, - BottomUpPageRoute(CargoTypeEditor()), - ); - }, - ), - ), - ), - SizedBox(height: 25), - ], - ), - Divider(), - Center( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: LocalText( - context, - "box.dimension", - color: primaryColor, - fontSize: 16, - fontWeight: FontWeight.w700, - ), - ), - ), - Column( - children: [ - shipmentWeightBox, - widthBox, - heightBox, - lengthBox, - SizedBox(height: 25), - ], - ), - Divider(), - Center( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: LocalText( - context, - "box.delivery_address", - color: primaryColor, - fontSize: 16, - fontWeight: FontWeight.w700, - ), - ), - ), - Column( - children: [ - DeliveryAddressRow(deliveryAddress: _deliveryAddress), - 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, - onPressed: () async { - DeliveryAddress deliveryAddress = - await Navigator.push( - context, - BottomUpPageRoute(DeliveryAddressList()), - ); - setState(() { - _deliveryAddress = deliveryAddress; - }); - }, - icon: Icon(Icons.add), - label: LocalText(context, "box.change_address", - color: Colors.white), - backgroundColor: primaryColor, - ), - ), - ), + children: getCargoRowList(), ), SizedBox(height: 10), ], ), - Divider(), - isNew - ? Container() - : Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: LocalText( - context, - "box.status", - color: primaryColor, - fontSize: 16, - fontWeight: FontWeight.w700, - ), + ), + Divider(), + SizedBox( + height: 10, + ), + TitleWithAddButton( + titleKey: "box.dimension", + ), + Column( + children: [ + shipmentWeightBox, + widthBox, + heightBox, + lengthBox, + SizedBox(height: 25), + ], + ), + Divider(), + Container( + padding: EdgeInsets.only(left: 10, right: 10), + child: DefaultDeliveryAddress( + deliveryAddress: _deliveryAddress, + onTap: () async { + DeliveryAddress d = await Navigator.push( + context, + BottomUpPageRoute(DeliveryAddressSelection( + deliveryAddress: _deliveryAddress, + )), + ); + if (d == null) return; + setState(() { + this._deliveryAddress = d; + }); + }), + ), + SizedBox(height: 15), + Divider(), + isNew + ? Container() + : Column( + children: [ + Padding( + padding: EdgeInsets.only(top: 10), + child: TitleWithAddButton( + titleKey: "box.status", ), - Container( - height: 230, - padding: EdgeInsets.only(left: 10), - child: isNew - ? Container() - : Timeline( - children: _models(), - position: TimelinePosition.Left), - ), - ], - ), - isNew ? Container() : Divider(), - SizedBox( - height: 10, - ), - widget.box == null - ? createBtn - : Container( - child: Column( - children: [ - completeBtn, - widget.box.status == 'Arrived' - ? deliveryBtn - : Container(), - ], - )), - SizedBox( - height: 20, - ), - ], - ), + ), + Container( + height: 230, + padding: EdgeInsets.only(left: 10), + child: isNew + ? Container() + : Timeline( + children: _models(), + position: TimelinePosition.Left), + ), + ], + ), + isNew ? Container() : Divider(), + SizedBox( + height: 10, + ), + widget.box == null + ? createBtn + : Container( + child: Column( + children: [ + completeBtn, + widget.box.status == 'Arrived' + ? deliveryBtn + : Container(), + ], + )), + SizedBox( + height: 20, + ), + ], ), ), ); diff --git a/lib/pages/box/model/box_model.dart b/lib/pages/box/model/box_model.dart index eaa7034..6cc9939 100644 --- a/lib/pages/box/model/box_model.dart +++ b/lib/pages/box/model/box_model.dart @@ -52,9 +52,9 @@ class BoxModel extends BaseModel { state: 'NY', phoneNumber: '+1 (292)215-2247'), cargoTypes: [ - Cargo(type: 'General Cargo', weight: 25), + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]), Box( shipmentNumber: "A202", @@ -82,9 +82,9 @@ class BoxModel extends BaseModel { state: 'Myanmar', phoneNumber: '+09 95724 8750'), cargoTypes: [ - Cargo(type: 'General Cargo', weight: 25), + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]), Box( shipmentNumber: "A202", @@ -112,9 +112,9 @@ class BoxModel extends BaseModel { state: 'Myanmar', phoneNumber: '+09 95724 8750'), cargoTypes: [ - Cargo(type: 'General Cargo', weight: 25), + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]), Box( shipmentNumber: "A202", @@ -142,9 +142,9 @@ class BoxModel extends BaseModel { state: 'NY', phoneNumber: '+1 (292)215-2247'), cargoTypes: [ - Cargo(type: 'General Cargo', weight: 25), + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]), Box( shipmentNumber: "A202", @@ -172,9 +172,9 @@ class BoxModel extends BaseModel { state: 'NY', phoneNumber: '+1 (292)215-2247'), cargoTypes: [ - Cargo(type: 'General Cargo', weight: 25), + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]), Box( shipmentNumber: "A202", @@ -202,9 +202,9 @@ class BoxModel extends BaseModel { state: 'NY', phoneNumber: '+1 (292)215-2247'), cargoTypes: [ - Cargo(type: 'General Cargo', weight: 25), + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]), Box( shipmentNumber: "A201", @@ -232,9 +232,9 @@ class BoxModel extends BaseModel { state: 'NY', phoneNumber: '+1 (292)215-2247'), cargoTypes: [ - Cargo(type: 'General Cargo', weight: 25), + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]), Box( shipmentNumber: "A201", @@ -262,9 +262,9 @@ class BoxModel extends BaseModel { state: 'NY', phoneNumber: '+1 (292)215-2247'), cargoTypes: [ - Cargo(type: 'General Cargo', weight: 25), + Cargo(type: 'General', weight: 25), Cargo(type: 'Medicine', weight: 20), - Cargo(type: 'Dangerous Cargo', weight: 30) + Cargo(type: 'Dangerous', weight: 30) ]), ];