diff --git a/assets/local/localization_en.json b/assets/local/localization_en.json index a364a45..bcd6c40 100644 --- a/assets/local/localization_en.json +++ b/assets/local/localization_en.json @@ -275,7 +275,7 @@ "box.packages":"Packages", "box.tracking.id":"Tracking ID", "box.market":"Market", - "box.cargo.save.btn":"Save", + "box.cargo.save.btn":"Select", "box.type.title":"Carton types", "box.shipment.boxes":"Cartons", "box.shipment_number":"Shipment number", diff --git a/assets/local/localization_mu.json b/assets/local/localization_mu.json index 4bfea1f..929b177 100644 --- a/assets/local/localization_mu.json +++ b/assets/local/localization_mu.json @@ -275,7 +275,7 @@ "box.packages":"အထုပ်များ", "box.tracking.id":"Tracking ID", "box.market":"အွန်လိုင်စျေးဆိုင်", - "box.cargo.save.btn":"သိမ်းဆည်းမည်", + "box.cargo.save.btn":"ရွေးမည်", "box.type.title":"သေတ္တာအမျိုးအစားများ", "box.shipment.boxes":"သေတ္တာများ", "box.shipment_number":"ပို့ဆောင်နံပါတ်", diff --git a/lib/domain/entities/carton.dart b/lib/domain/entities/carton.dart index 20045c5..7526b9b 100644 --- a/lib/domain/entities/carton.dart +++ b/lib/domain/entities/carton.dart @@ -60,6 +60,7 @@ class Carton { //for mix box String mixBoxType; List mixCartons; + List mixCartonIDs; int get amount => rate != null && weight != null ? rate * weight : 0; @@ -172,10 +173,11 @@ class Carton { this.cartonSizeID, this.cartonSizeName, this.mixBoxType, - this.mixCartons}); + this.mixCartons, + this.mixCartonIDs}); Map toMap() { - List _cargoTypes = cargoTypes.map((c) => c.toMap()).toList(); + List _cargoTypes = cargoTypes?.map((c) => c.toMap())?.toList() ?? []; List _packages = packages?.map((c) => c.toJson())?.toList(); List _mixCartons = mixCartons?.map((c) => c.toJson())?.toList(); return { @@ -246,6 +248,7 @@ class Carton { senderID: map['sender_id'], senderFCSID: map['sender_fcs_id'], senderName: map['sender_name'], + mixCartonIDs: List.from(map['mix_carton_ids'] ?? []), ); } diff --git a/lib/domain/vo/delivery_address.dart b/lib/domain/vo/delivery_address.dart index a0c507e..93e7960 100644 --- a/lib/domain/vo/delivery_address.dart +++ b/lib/domain/vo/delivery_address.dart @@ -7,6 +7,7 @@ class DeliveryAddress { String state; String phoneNumber; bool isDefault; + String userID; DeliveryAddress( {this.id, this.fullName, @@ -15,6 +16,7 @@ class DeliveryAddress { this.city, this.state, this.phoneNumber, + this.userID, this.isDefault = false}); factory DeliveryAddress.fromMap(Map map, String docID) { @@ -39,6 +41,7 @@ class DeliveryAddress { 'city': city, 'state': state, 'phone_number': phoneNumber, + 'user_id': userID, }; } diff --git a/lib/pages/carton/carton_editor.dart b/lib/pages/carton/carton_editor.dart index c56f2ad..2fe89aa 100644 --- a/lib/pages/carton/carton_editor.dart +++ b/lib/pages/carton/carton_editor.dart @@ -98,10 +98,16 @@ class _CartonEditorState extends State { _selectedCartonType = _carton.cartonType; _cargoTypes = List.from(_carton.cargoTypes); _isNew = false; - _user = User(fcsID: _carton.fcsID, name: _carton.userName); - consignee = - User(fcsID: _carton.receiverFCSID, name: _carton.receiverName); - sender = User(fcsID: _carton.senderID, name: _carton.senderName); + _user = User( + id: _carton.userID, fcsID: _carton.fcsID, name: _carton.userName); + consignee = User( + id: _carton.receiverID, + fcsID: _carton.receiverFCSID, + name: _carton.receiverName); + sender = User( + id: _carton.senderID, + fcsID: _carton.senderID, + name: _carton.senderName); _selectedMixBoxType = _carton.mixBoxType ?? ""; this._mixCartons = _carton.mixCartons == null ? [] : List.from(_carton.mixCartons); @@ -268,13 +274,12 @@ class _CartonEditorState extends State { _isNew ? IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => - searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this._user = u; _loadPackages(); }); - })) + }, popPage: true)) : Container(), ], )); @@ -356,6 +361,36 @@ class _CartonEditorState extends State { ), ); + final mixTypeDisplayBox = Container( + padding: EdgeInsets.only(top: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.only(left: 5), + child: LocalText( + context, + "box.mix_type", + color: primaryColor, + fontSize: 15, + fontWeight: FontWeight.bold, + )), + Row( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Icon( + Icons.check, + color: primaryColor, + ), + ), + Text(_selectedMixBoxType ?? "") + ], + ) + ], + ), + ); + final mixcartonTitleBox = Container( child: LocalTitle( textKey: "box.mix_caton_title", @@ -427,7 +462,7 @@ class _CartonEditorState extends State { ); final createMixCarton = LocalButton( - textKey: _isNew ? "box.mix_carton_btn" : "box.cargo.save.btn", + textKey: _isNew ? "box.mix_carton_btn" : "btn.save", callBack: _creatMixCarton, ); @@ -441,11 +476,11 @@ class _CartonEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this.consignee = u; }); - })), + }, popPage: true)), ], ); @@ -475,11 +510,11 @@ class _CartonEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this.sender = u; }); - })), + }, popPage: true)), ], ); @@ -537,7 +572,11 @@ class _CartonEditorState extends State { cartonTypeBox, LocalTitle(textKey: "box.shipment_info"), _isNew ? fcsShipmentsBox : shipmentBox, - isMixBox ? mixTypeBox : Container(), + isMixBox + ? _isNew + ? mixTypeBox + : mixTypeDisplayBox + : Container(), ...(isMixBox ? [ mixcartonTitleBox, @@ -647,8 +686,11 @@ class _CartonEditorState extends State { Carton _c = await Navigator.push( context, CupertinoPageRoute( - builder: (context) => - PackageCartonEditor(carton: c.value, isNew: false)), + builder: (context) => PackageCartonEditor( + carton: c.value, + isNew: false, + consignee: _user, + )), ); if (_c == null) return; cartons.removeWhere((item) => item.id == _c.id); @@ -826,8 +868,11 @@ class _CartonEditorState extends State { Carton _c = await Navigator.push( context, CupertinoPageRoute( - builder: (context) => - PackageCartonEditor(carton: carton, isNew: _isNew)), + builder: (context) => PackageCartonEditor( + carton: carton, + isNew: _isNew, + consignee: _user, + )), ); if (_c == null) return; var cartonModel = Provider.of(context, listen: false); @@ -882,9 +927,9 @@ class _CartonEditorState extends State { CartonModel cartonModel = Provider.of(context, listen: false); if (_isNew) { - await cartonModel.createMixCarton(carton); + await cartonModel.createCarton(carton); } else { - await cartonModel.updateMixCarton(carton); + await cartonModel.updateCarton(carton); } Navigator.pop(context, true); } catch (e) { diff --git a/lib/pages/carton/carton_info.dart b/lib/pages/carton/carton_info.dart index 925f494..0a9a7e7 100644 --- a/lib/pages/carton/carton_info.dart +++ b/lib/pages/carton/carton_info.dart @@ -51,7 +51,6 @@ class _CartonInfoState extends State { double volumetricRatio = 0; double shipmentWeight = 0; String selectMixBoxType; - List _mixCartons = []; bool isMixBox; bool isFromShipments; @@ -76,6 +75,7 @@ class _CartonInfoState extends State { _updateBoxData(); _loadPackages(); + _loadMixCartons(); } _updateBoxData() { @@ -93,7 +93,6 @@ class _CartonInfoState extends State { isEdiable = (isFromPackages || isMixBox || isFromCartons) && _box.status == carton_packed_status; selectMixBoxType = _box.mixBoxType ?? ""; - _mixCartons = _box.mixCartons == null ? [] : _box.mixCartons; getCartonSize(); } @@ -132,6 +131,20 @@ class _CartonInfoState extends State { }); } + _loadMixCartons() async { + if (_box.cartonType != carton_mix_box) return; + CartonModel cartonModel = Provider.of(context, listen: false); + List catons = []; + for (var id in _box.mixCartonIDs) { + Carton c = await cartonModel.getCarton(id); + catons.add(c); + } + + setState(() { + _box.mixCartons = catons; + }); + } + _calShipmentWeight() { double l = double.parse(_lengthController.text, (s) => 0); double w = double.parse(_widthController.text, (s) => 0); @@ -356,7 +369,7 @@ class _CartonInfoState extends State { isMixBox ? mixTypeBox : Container(), isMixBox ? LocalTitle(textKey: "box.mix_caton_title") : Container(), isMixBox - ? Column(children: _getCartons(context, this._mixCartons)) + ? Column(children: _getCartons(context, _box.mixCartons)) : Container(), isFromPackages || isSmallBag ? CartonPackageTable( @@ -397,6 +410,7 @@ class _CartonInfoState extends State { } _gotoEditor() async { + widget.box.mixCartons=_box.mixCartons; bool updated = await Navigator.push( context, CupertinoPageRoute(builder: (context) => CartonEditor(box: widget.box)), @@ -406,9 +420,10 @@ class _CartonInfoState extends State { var c = await cartonModel.getCarton(widget.box.id); setState(() { _box = c; + _loadPackages(); + _loadMixCartons(); _updateBoxData(); }); - _loadPackages(); } } diff --git a/lib/pages/carton/model/carton_model.dart b/lib/pages/carton/model/carton_model.dart index c664df8..0348ebb 100644 --- a/lib/pages/carton/model/carton_model.dart +++ b/lib/pages/carton/model/carton_model.dart @@ -60,7 +60,7 @@ class CartonModel extends BaseModel { List cartonTypes = [ carton_from_packages, - carton_from_cargos, + // carton_from_cargos, carton_mix_box ]; List mixBoxTypes = [mix_delivery, mix_pickup]; @@ -262,11 +262,4 @@ class CartonModel extends BaseModel { return Services.instance.cartonService.searchCarton(term); } - Future createMixCarton(Carton carton) { - // return Services.instance.cartonService.createCarton(carton); - } - - Future updateMixCarton(Carton carton) { - // return Services.instance.cartonService.updateCarton(carton); - } } diff --git a/lib/pages/carton/package_carton_editor.dart b/lib/pages/carton/package_carton_editor.dart index 9fde587..04a5793 100644 --- a/lib/pages/carton/package_carton_editor.dart +++ b/lib/pages/carton/package_carton_editor.dart @@ -3,6 +3,7 @@ import 'package:fcs/domain/entities/carton.dart'; import 'package:fcs/domain/entities/cargo_type.dart'; import 'package:fcs/domain/entities/carton_size.dart'; import 'package:fcs/domain/entities/package.dart'; +import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/domain/vo/delivery_address.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/carton_size/carton_size_list.dart'; @@ -30,7 +31,8 @@ import 'model/carton_model.dart'; class PackageCartonEditor extends StatefulWidget { final Carton carton; final bool isNew; - PackageCartonEditor({this.carton, this.isNew}); + final User consignee; + PackageCartonEditor({this.carton, this.isNew, this.consignee}); @override _PackageCartonEditorState createState() => _PackageCartonEditorState(); @@ -199,8 +201,10 @@ class _PackageCartonEditorState extends State { context, CupertinoPageRoute( builder: (context) => DeliveryAddressSelection( - deliveryAddress: _deliveryAddress, - deliveryAddresses: this._deliveryAddresses)), + deliveryAddress: _deliveryAddress, + deliveryAddresses: this._deliveryAddresses, + user: widget.consignee, + )), ); if (d == null) return; setState(() { diff --git a/lib/pages/customer/customer_list.dart b/lib/pages/customer/customer_list.dart index 4e706df..a1fbd72 100644 --- a/lib/pages/customer/customer_list.dart +++ b/lib/pages/customer/customer_list.dart @@ -43,7 +43,7 @@ class _CustomerListState extends State { actions: [ IconButton( icon: Icon(Icons.search, color: Colors.white), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { _select(u); })), ], diff --git a/lib/pages/delivery_address/delivery_address_editor.dart b/lib/pages/delivery_address/delivery_address_editor.dart index 26bbccd..63c4715 100644 --- a/lib/pages/delivery_address/delivery_address_editor.dart +++ b/lib/pages/delivery_address/delivery_address_editor.dart @@ -1,3 +1,4 @@ +import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/domain/vo/delivery_address.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/delivery_address/model/delivery_address_model.dart'; @@ -12,7 +13,8 @@ import 'package:provider/provider.dart'; class DeliveryAddressEditor extends StatefulWidget { final DeliveryAddress deliveryAddress; - DeliveryAddressEditor({this.deliveryAddress}); + final User user; + DeliveryAddressEditor({this.deliveryAddress, this.user}); @override _DeliveryAddressEditorState createState() => _DeliveryAddressEditorState(); @@ -195,6 +197,9 @@ class _DeliveryAddressEditorState extends State { if (!valid) { return; } + if (widget.user != null) { + deliveryAddress.userID = widget.user.id; + } setState(() { _isLoading = true; }); @@ -202,7 +207,7 @@ class _DeliveryAddressEditorState extends State { Provider.of(context, listen: false); try { await deliveryAddressModel.createDeliveryAddress(deliveryAddress); - Navigator.pop(context); + Navigator.pop(context,true); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { @@ -225,7 +230,7 @@ class _DeliveryAddressEditorState extends State { Provider.of(context, listen: false); try { await deliveryAddressModel.updateDeliveryAddress(deliveryAddress); - Navigator.pop(context); + Navigator.pop(context,true); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { @@ -247,7 +252,7 @@ class _DeliveryAddressEditorState extends State { DeliveryAddressModel deliveryAddressModel = Provider.of(context, listen: false); await deliveryAddressModel.deleteDeliveryAddress(_deliveryAddress); - Navigator.pop(context); + Navigator.pop(context,true); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { diff --git a/lib/pages/discount/discount_editor.dart b/lib/pages/discount/discount_editor.dart index d28856f..d967cb5 100644 --- a/lib/pages/discount/discount_editor.dart +++ b/lib/pages/discount/discount_editor.dart @@ -77,12 +77,12 @@ class _DiscountEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { customerId = u.id; customerName = u.name; }); - })), + },popPage: true)), ], ); diff --git a/lib/pages/package/package_list_row.dart b/lib/pages/package/package_list_row.dart index ea6052c..76c8297 100644 --- a/lib/pages/package/package_list_row.dart +++ b/lib/pages/package/package_list_row.dart @@ -23,7 +23,7 @@ class PackageListRow extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: () { + onTap: () { if (callbackPackageSelect != null) { callbackPackageSelect(package); return; diff --git a/lib/pages/package/package_new.dart b/lib/pages/package/package_new.dart index 8bda98b..54360eb 100644 --- a/lib/pages/package/package_new.dart +++ b/lib/pages/package/package_new.dart @@ -47,7 +47,7 @@ class _PackageNewState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this.user = u; }); diff --git a/lib/pages/processing/package_editor.dart b/lib/pages/processing/package_editor.dart index 0aabd00..17a7292 100644 --- a/lib/pages/processing/package_editor.dart +++ b/lib/pages/processing/package_editor.dart @@ -1,3 +1,4 @@ +import 'package:fcs/domain/constants.dart'; import 'package:fcs/domain/entities/market.dart'; import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/domain/entities/user.dart'; @@ -7,7 +8,9 @@ import 'package:fcs/pages/market/model/market_model.dart'; import 'package:fcs/pages/package/model/package_model.dart'; import 'package:fcs/pages/package/tracking_id_page.dart'; import 'package:fcs/pages/main/util.dart'; +import 'package:fcs/pages/package_search/package_serach.dart'; import 'package:fcs/pages/widgets/barcode_scanner.dart'; +import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/input_text.dart'; import 'package:fcs/pages/widgets/local_text.dart'; import 'package:fcs/pages/widgets/multi_img_controller.dart'; @@ -32,59 +35,60 @@ class PackageEditor extends StatefulWidget { class _PackageEditorState extends State { TextEditingController _remarkCtl = new TextEditingController(); TextEditingController _descCtl = new TextEditingController(); - TextEditingController _trackingIDCtl = new TextEditingController(); bool _isLoading = false; - bool _isNew; MultiImgController multiImgController = MultiImgController(); - Package _package = Package(); + Package _package; @override void initState() { super.initState(); - if (widget.package != null) { - _isNew = false; - _package = widget.package; - _trackingIDCtl.text = _package.trackingID; + _package = Package(); + _loadPackageData(null); + } + _loadPackageData(String id) async { + if (id != null) { + PackageModel packageModel = + Provider.of(context, listen: false); + Package package = await packageModel.getPackage(id); + if (package != null) { + if (package.status != package_received_status) { + showMsgDialog(context, "Error", + "Invalid package status, expected '$package_received_status' status"); + return; + } + setState(() { + _package = package; + }); + } + } + setState(() { selectedMarket = _package.market ?? ""; _descCtl.text = _package.desc; _remarkCtl.text = _package.remark; - multiImgController.setImageFiles = _package.photoFiles; - } else { - _isNew = true; - } + multiImgController.setImageUrls = _package.photoUrls; + }); } @override Widget build(BuildContext context) { - final trackingIDBox = Container( - child: Row( - crossAxisAlignment: CrossAxisAlignment.end, + var trackingIDBox = Row( children: [ Expanded( - child: InputText( - iconData: MaterialCommunityIcons.barcode_scan, + child: DisplayText( + text: _package.trackingID, labelTextKey: "processing.tracking.id", - controller: _trackingIDCtl, + iconData: MaterialCommunityIcons.barcode_scan, )), - InkWell( - onTap: _scan, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - Icon( - MaterialCommunityIcons.barcode_scan, - color: primaryColor, - ), - Text("Scan") - ], - ), - ), - ), + IconButton( + icon: Icon(Icons.search, color: primaryColor), + onPressed: () => searchPackage(context, callbackPackageSelect: (u) { + _loadPackageData(u.id); + Navigator.pop(context); + })), ], - )); + ); final descBox = InputText( labelTextKey: 'processing.desc', @@ -243,31 +247,6 @@ class _PackageEditorState extends State { ); } - _scan() async { - PermissionStatus permission = - await PermissionHandler().checkPermissionStatus(PermissionGroup.camera); - if (permission != PermissionStatus.granted) { - Map permissions = - await PermissionHandler() - .requestPermissions([PermissionGroup.camera]); - if (permissions[PermissionGroup.camera] != PermissionStatus.granted) { - showMsgDialog(context, "Error", "Camera permission is not granted"); - return null; - } - } - - try { - String barcode = await scanBarcode(); - if (barcode != null) { - setState(() { - _trackingIDCtl.text = barcode; - }); - } - } catch (e) { - print('error: $e'); - } - } - _selectPackage() async { setState(() { _isLoading = true; @@ -275,22 +254,17 @@ class _PackageEditorState extends State { PackageModel packageModel = Provider.of(context, listen: false); try { - Package package = - await packageModel.getPackageByTrackingID(_trackingIDCtl.text); - package.trackingID = _trackingIDCtl.text; - package.market = selectedMarket; - package.desc = _descCtl.text; - package.remark = _remarkCtl.text; - package.photoFiles = _isNew - ? multiImgController.getAddedFile - : multiImgController.getUpdatedFile; - package.fcsID = widget.consignee.fcsID; - package.senderFCSID = widget.sender?.fcsID; + _package.market = selectedMarket; + _package.desc = _descCtl.text; + _package.remark = _remarkCtl.text; + _package.photoFiles = multiImgController.getUpdatedFile; + _package.fcsID = widget.consignee.fcsID; + _package.senderFCSID = widget.sender?.fcsID; - await packageModel.updateProcessing(package, + await packageModel.updateProcessing(_package, multiImgController.getAddedFile, multiImgController.getDeletedUrl); - Navigator.pop(context, package); + Navigator.pop(context, _package); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { @@ -301,8 +275,7 @@ class _PackageEditorState extends State { } isDataChanged() { - return _trackingIDCtl.text != "" || - selectedMarket != null || + return selectedMarket != null || _descCtl.text != "" || _remarkCtl.text != "" || multiImgController.getAddedFile.isNotEmpty; diff --git a/lib/pages/processing/processing_edit_editor.dart b/lib/pages/processing/processing_edit_editor.dart index 1786e33..40af132 100644 --- a/lib/pages/processing/processing_edit_editor.dart +++ b/lib/pages/processing/processing_edit_editor.dart @@ -68,7 +68,7 @@ class _ProcessingEditEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this._user = u; }); diff --git a/lib/pages/processing/processing_editor.dart b/lib/pages/processing/processing_editor.dart index dab0ad2..3618af4 100644 --- a/lib/pages/processing/processing_editor.dart +++ b/lib/pages/processing/processing_editor.dart @@ -62,11 +62,11 @@ class _ProcesingEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this.consignee = u; }); - })), + }, popPage: true)), ], ); @@ -104,11 +104,11 @@ class _ProcesingEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this.sender = u; }); - })), + }, popPage: true)), ], ); @@ -148,7 +148,8 @@ class _ProcesingEditorState extends State { ), onPressed: () async { if (this.consignee == null) { - showMsgDialog(context, "Warning", "Please select 'Consignee'"); + showMsgDialog( + context, "Warning", "Please select 'Consignee'"); return; } Package _package = await Navigator.push( @@ -181,13 +182,7 @@ class _ProcesingEditorState extends State { icon: new Icon(CupertinoIcons.back, color: primaryColor, size: 30), onPressed: () { - if (isDataChanged()) { - showConfirmDialog(context, "back.button_confirm", () { - Navigator.of(context).pop(); - }); - } else { - Navigator.of(context).pop(); - } + Navigator.of(context).pop(); }, ), shadowColor: Colors.transparent, @@ -290,16 +285,4 @@ class _ProcesingEditorState extends State { }); } } - - isDataChanged() { - if (_isNew) { - return this.packages.isNotEmpty || consignee != null || sender != null; - } else { - Processing _processing = Processing( - userID: consignee.fcsID, - fcsID: sender.fcsID, - packages: this.packages); - return widget.processing.isChangedForEdit(_processing); - } - } } diff --git a/lib/pages/processing_old/processing_editor.dart b/lib/pages/processing_old/processing_editor.dart index e521dc3..0179675 100644 --- a/lib/pages/processing_old/processing_editor.dart +++ b/lib/pages/processing_old/processing_editor.dart @@ -69,7 +69,7 @@ class _ProcessingEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this._user = u; }); diff --git a/lib/pages/receiving/receiving_editor.dart b/lib/pages/receiving/receiving_editor.dart index f9c670f..ae454d8 100644 --- a/lib/pages/receiving/receiving_editor.dart +++ b/lib/pages/receiving/receiving_editor.dart @@ -77,11 +77,11 @@ class _ReceivingEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: primaryColor), - onPressed: () => searchUser(context, callbackUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) { setState(() { this.user = u; }); - })), + },popPage: true)), ], ); diff --git a/lib/pages/user_search/user_list_row.dart b/lib/pages/user_search/user_list_row.dart index 5f99621..da8822f 100644 --- a/lib/pages/user_search/user_list_row.dart +++ b/lib/pages/user_search/user_list_row.dart @@ -4,9 +4,9 @@ import 'package:fcs/pages/user_search/user_serach.dart'; import 'package:flutter/material.dart'; class UserListRow extends StatefulWidget { - final CallbackUserSelect callbackUserSelect; + final OnUserRowSelect onUserRowSelect; final User user; - const UserListRow({this.user, this.callbackUserSelect}); + const UserListRow({this.user, this.onUserRowSelect}); @override _UserListRowState createState() => _UserListRowState(); @@ -30,9 +30,8 @@ class _UserListRowState extends State { color: Colors.white, child: InkWell( onTap: () { - Navigator.pop(context); - if (widget.callbackUserSelect != null) - widget.callbackUserSelect(widget.user); + if (widget.onUserRowSelect != null) + widget.onUserRowSelect(widget.user); }, child: Row( children: [ diff --git a/lib/pages/user_search/user_serach.dart b/lib/pages/user_search/user_serach.dart index 4d227ef..0225b62 100644 --- a/lib/pages/user_search/user_serach.dart +++ b/lib/pages/user_search/user_serach.dart @@ -5,19 +5,22 @@ import 'package:fcs/pages/user_search/user_list_row.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -typedef CallbackUserSelect(User suer); +typedef OnUserSelect(User suer); +typedef OnUserRowSelect(User suer); Future searchUser(BuildContext context, - {CallbackUserSelect callbackUserSelect}) async => + {OnUserSelect onUserSelect, bool popPage = false}) async => await showSearch( context: context, - delegate: UserSearchDelegate(callbackUserSelect: callbackUserSelect), + delegate: + UserSearchDelegate(onUserSelect: onUserSelect, popPage: popPage), ); class UserSearchDelegate extends SearchDelegate { - final CallbackUserSelect callbackUserSelect; + final OnUserSelect onUserSelect; + final bool popPage; - UserSearchDelegate({this.callbackUserSelect}); + UserSearchDelegate({this.onUserSelect, this.popPage}); @override String get searchFieldLabel => 'Search by FCS ID or Name'; @@ -77,7 +80,7 @@ class UserSearchDelegate extends SearchDelegate { children: snapshot.data .map((u) => UserListRow( user: u, - callbackUserSelect: callbackUserSelect, + onUserRowSelect: (u) => _onUserRowSelect(context, u), )) .toList(), ), @@ -113,4 +116,13 @@ class UserSearchDelegate extends SearchDelegate { ), ); } + + _onUserRowSelect(BuildContext context, User user) { + if (onUserSelect != null) { + onUserSelect(user); + } + if (popPage) { + Navigator.pop(context); + } + } } diff --git a/lib/pages/widgets/delivery_address_selection.dart b/lib/pages/widgets/delivery_address_selection.dart index a48612c..23f917f 100644 --- a/lib/pages/widgets/delivery_address_selection.dart +++ b/lib/pages/widgets/delivery_address_selection.dart @@ -1,3 +1,4 @@ +import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/domain/vo/delivery_address.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/delivery_address/delivery_address_editor.dart'; @@ -9,9 +10,10 @@ import 'package:flutter/material.dart'; class DeliveryAddressSelection extends StatelessWidget { final DeliveryAddress deliveryAddress; final List deliveryAddresses; + final User user; const DeliveryAddressSelection( - {Key key, this.deliveryAddress, this.deliveryAddresses}) + {Key key, this.deliveryAddress, this.deliveryAddresses, this.user}) : super(key: key); @override @@ -29,9 +31,11 @@ class DeliveryAddressSelection extends StatelessWidget { color: primaryColor, fontSize: 20), ), floatingActionButton: FloatingActionButton.extended( - onPressed: () { + onPressed: () async { Navigator.of(context).push(CupertinoPageRoute( - builder: (context) => DeliveryAddressEditor())); + builder: (context) => DeliveryAddressEditor( + user: user, + ))); }, icon: Icon(Icons.add), label: LocalText(context, "delivery_address.new_address",