diff --git a/lib/domain/constants.dart b/lib/domain/constants.dart index cc05bbf..e98ffa2 100644 --- a/lib/domain/constants.dart +++ b/lib/domain/constants.dart @@ -118,7 +118,7 @@ const carton_invoiced_status = "invoiced"; const carton_canceled_status = "canceled"; const all_status = "All stauts"; const all = "All"; -const see_all ="See All"; +const see_more = "See More"; // shipment status const shipment_pending_status = "pending"; diff --git a/lib/pages/carton/carton_editor.dart b/lib/pages/carton/carton_editor.dart index 25325e0..19d1d52 100644 --- a/lib/pages/carton/carton_editor.dart +++ b/lib/pages/carton/carton_editor.dart @@ -13,10 +13,12 @@ import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vector_icons/flutter_vector_icons.dart'; +import 'package:provider/provider.dart'; import '../main/util.dart'; import 'carton_package_form.dart'; import 'carton_info.dart'; import 'mix_carton/mix_carton_form.dart'; +import 'model/package_selection_model.dart'; import 'widget/carton_row.dart'; class CartonEditor extends StatefulWidget { @@ -38,6 +40,7 @@ class _CartonEditorState extends State { User? _consignee; User? _sender; Carton? _carton; + bool _hasPackages = true; @override void initState() { @@ -140,6 +143,12 @@ class _CartonEditorState extends State { return; } + if (!_hasPackages) { + showMsgDialog( + context, "Error", "No packages in sender and consignee"); + return; + } + Navigator.push( context, CupertinoPageRoute( @@ -170,10 +179,12 @@ class _CartonEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: Colors.black), - onPressed: () => searchUser(context, onUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) async { setState(() { this._consignee = u; }); + + _checkPackages(); }, popPage: true)), ], ); @@ -197,11 +208,12 @@ class _CartonEditorState extends State { final consigneeBox = Container( child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ consigneeSearchBox, consigneefcsIDBox, consigneePhoneBox, - consigneeNameBox + consigneeNameBox, ], ), ); @@ -216,10 +228,12 @@ class _CartonEditorState extends State { )), IconButton( icon: Icon(Icons.search, color: Colors.black), - onPressed: () => searchUser(context, onUserSelect: (u) { + onPressed: () => searchUser(context, onUserSelect: (u) async { setState(() { this._sender = u; }); + + _checkPackages(); }, popPage: true)), ], ); @@ -243,6 +257,7 @@ class _CartonEditorState extends State { final senderBox = Container( child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ senderSearchBox, senderIDBox, @@ -268,14 +283,24 @@ class _CartonEditorState extends State { cartonTypeBox, isFromPackages ? Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ LocalTitle(textKey: "box.select.sender_and_consignee"), Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Flexible(child: senderBox), Flexible(child: consigneeBox) ], ), + !_hasPackages + ? Padding( + padding: const EdgeInsets.only(top: 5), + child: Text("No packages in sender and consignee", + style: TextStyle( + color: dangerColor, fontSize: 13)), + ) + : const SizedBox() ], ) : Container(), @@ -290,6 +315,18 @@ class _CartonEditorState extends State { ); } + _checkPackages() async { + if (_sender != null && _consignee != null) { + var p = await context + .read() + .getPackagesBySenderAndConsigneeId( + senderId: _sender!.id ?? "", consigneeId: _consignee!.id ?? ""); + setState(() { + _hasPackages = p.isNotEmpty; + }); + } + } + List _getCartons(BuildContext context, List cartons) { return cartons.map((c) { return InkWell( diff --git a/lib/pages/carton/carton_list.dart b/lib/pages/carton/carton_list.dart index c20ce40..f370eed 100644 --- a/lib/pages/carton/carton_list.dart +++ b/lib/pages/carton/carton_list.dart @@ -41,7 +41,7 @@ class _CartonListState extends State { _shipments.insert(0, model.defaultShipment); if (_shipments.length > shipmentCountForCartonFilter) { _shipments.insert(_shipments.length, - FcsShipment(shipmentNumber: "See All", id: see_all)); + FcsShipment(shipmentNumber: "See More", id: see_more)); } _selectedShipment = model.shipment ?? model.defaultShipment; @@ -72,7 +72,7 @@ class _CartonListState extends State { child: ActionChip( shape: StadiumBorder( side: BorderSide( - color: g.id == see_all + color: g.id == see_more ? Colors.transparent : _selectedShipment?.id == g.id ? primaryColor @@ -83,7 +83,7 @@ class _CartonListState extends State { }, label: Text(g.shipmentNumber ?? "", style: TextStyle( - color: g.id == see_all + color: g.id == see_more ? primaryColor : _selectedShipment?.id == g.id ? primaryColor @@ -343,7 +343,7 @@ class _CartonListState extends State { } _filterShipment(FcsShipment shipment) async { - if (shipment.id == see_all) { + if (shipment.id == see_more) { _showFilter(); return; } diff --git a/lib/pages/carton/carton_size_widget.dart b/lib/pages/carton/carton_size_widget.dart index 6b852e8..b498760 100644 --- a/lib/pages/carton/carton_size_widget.dart +++ b/lib/pages/carton/carton_size_widget.dart @@ -1,4 +1,5 @@ import 'package:fcs/pages/widgets/local_radio.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vector_icons/flutter_vector_icons.dart'; import 'package:provider/provider.dart'; @@ -7,6 +8,7 @@ import '../../../domain/entities/carton_size.dart'; import '../../../domain/entities/fcs_shipment.dart'; import '../../../helpers/theme.dart'; import '../../domain/entities/user.dart'; +import '../carton_size/carton_size_list.dart'; import '../carton_size/model/carton_size_model.dart'; import '../fcs_shipment/model/fcs_shipment_model.dart'; import '../main/util.dart'; @@ -120,7 +122,8 @@ class _CartonSizeWidgetState extends State { @override Widget build(BuildContext context) { - List cartonSizes = context.watch().cartonSizes; + List cartonSizes = + context.watch().getCartonSizes; bool isStandardSize = _cartonSizeType == standardCarton; bool isCustomSize = _cartonSizeType == customCarton; bool isNoneDefinedSize = _cartonSizeType == packageCartion; @@ -277,6 +280,11 @@ class _CartonSizeWidgetState extends State { underline: Container(height: 1, color: Colors.grey), onChanged: (newValue) { setState(() { + if (newValue?.name == MANAGE_CARTONSIZE) { + _selectStandardSize = null; + _manageCartonSize(); + return; + } _selectStandardSize = newValue!; }); }, @@ -285,16 +293,22 @@ class _CartonSizeWidgetState extends State { cartonSizes.map>((CartonSize value) { return DropdownMenuItem( value: value, - child: Row( - children: [ - Text("${value.name} - ", + child: value.name == MANAGE_CARTONSIZE + ? Text("${value.name}", style: TextStyle( - color: isStandardSize ? Colors.black : labelColor)), - Text( - "${value.length.toInt()}”x${value.width.toInt()}”x${value.height.toInt()}”", - style: TextStyle(color: labelColor)), - ], - ), + color: isStandardSize ? secondaryColor : labelColor)) + : Row( + children: [ + Text("${value.name} - ", + style: TextStyle( + color: isStandardSize + ? Colors.black + : labelColor)), + Text( + "${value.length.toInt()}”x${value.width.toInt()}”x${value.height.toInt()}”", + style: TextStyle(color: labelColor)), + ], + ), ); }).toList(), ), @@ -484,4 +498,11 @@ class _CartonSizeWidgetState extends State { ], ); } + + _manageCartonSize() { + Navigator.push( + context, + CupertinoPageRoute(builder: (context) => CartonSizeList()), + ); + } } diff --git a/lib/pages/carton/mix_carton/carton_selection_widget.dart b/lib/pages/carton/mix_carton/carton_selection_widget.dart index df44824..a8d4351 100644 --- a/lib/pages/carton/mix_carton/carton_selection_widget.dart +++ b/lib/pages/carton/mix_carton/carton_selection_widget.dart @@ -56,35 +56,32 @@ class _CartonSelectionWidgetState extends State { _init() { var model = context.read(); - model.addDefaultCartons(widget.shipment.id!); + _controller.text = model.query; + _query = model.query; + model.refresh(widget.shipment.id!, term: _query); model.addSelectedCarton(widget.cartons); - _controller.text = model.query; - _query = model.query; if (mounted) { setState(() {}); } } - @override - void didUpdateWidget(covariant CartonSelectionWidget oldWidget) { - _init(); - super.didUpdateWidget(oldWidget); - } + // @override + // void didUpdateWidget(covariant CartonSelectionWidget oldWidget) { + // _init(); + // super.didUpdateWidget(oldWidget); + // } Future _loadMoreData() async { if (_isLoadMore) return; var model = context.read(); - if (model.reachEnd || model.ended) return; + if (model.ended) return; setState(() { _isLoadMore = true; }); - if (_query != "") { - await model.loadMoreSearch(term: _query, shipmentId: widget.shipment.id!); - } else { - await model.loadMoreData(widget.shipment.id!); - } + + await model.loadMoreData(widget.shipment.id!, term: _query); setState(() { _isLoadMore = false; @@ -95,7 +92,7 @@ class _CartonSelectionWidgetState extends State { Widget build(BuildContext context) { var model = context.watch(); List searchResults = model.cartons; - List selectedCartonList = model.selectedCartonList; + List selectedCartonList = model.selectedCartons; final continueBtn = ContinueButton( onTap: () { diff --git a/lib/pages/carton/mix_carton/type_widget.dart b/lib/pages/carton/mix_carton/type_widget.dart index 331d2b5..0b6ab97 100644 --- a/lib/pages/carton/mix_carton/type_widget.dart +++ b/lib/pages/carton/mix_carton/type_widget.dart @@ -1,4 +1,5 @@ import 'package:fcs/pages/widgets/local_radio.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vector_icons/flutter_vector_icons.dart'; import 'package:provider/provider.dart'; @@ -6,6 +7,7 @@ import '../../../domain/constants.dart'; import '../../../domain/entities/carton_size.dart'; import '../../../domain/entities/fcs_shipment.dart'; import '../../../helpers/theme.dart'; +import '../../carton_size/carton_size_list.dart'; import '../../carton_size/model/carton_size_model.dart'; import '../../fcs_shipment/model/fcs_shipment_model.dart'; import '../../main/util.dart'; @@ -17,6 +19,7 @@ import '../../widgets/local_title.dart'; import '../../widgets/previous_button.dart'; typedef OnPrevious = Function(); +const manageStandardCartonSize = "Manage carton size"; typedef OnContinue = Function(FcsShipment shipment, String cartonSizeType, {CartonSize? standardSize, double? length, double? width, double? height}); @@ -101,7 +104,9 @@ class _TypeWidgetState extends State { @override Widget build(BuildContext context) { - List cartonSizes = context.watch().cartonSizes; + List cartonSizes = + context.watch().getCartonSizes; + bool isStandardSize = _cartionSizeType == standardCarton; bool isCustomSize = _cartionSizeType == customCarton; bool isNoneDefinedSize = _cartionSizeType == packageCartion; @@ -156,6 +161,11 @@ class _TypeWidgetState extends State { underline: Container(height: 1, color: Colors.grey), onChanged: (newValue) { setState(() { + if (newValue?.name == MANAGE_CARTONSIZE) { + _selectStandardSize = null; + _manageCartonSize(); + return; + } _selectStandardSize = newValue!; }); }, @@ -164,16 +174,22 @@ class _TypeWidgetState extends State { cartonSizes.map>((CartonSize value) { return DropdownMenuItem( value: value, - child: Row( - children: [ - Text("${value.name} - ", + child: value.name == MANAGE_CARTONSIZE + ? Text("${value.name}", style: TextStyle( - color: isStandardSize ? Colors.black : labelColor)), - Text( - "${value.length.toInt()}”x${value.width.toInt()}”x${value.height.toInt()}”", - style: TextStyle(color: labelColor)), - ], - ), + color: isStandardSize ? secondaryColor : labelColor)) + : Row( + children: [ + Text("${value.name} - ", + style: TextStyle( + color: isStandardSize + ? Colors.black + : labelColor)), + Text( + "${value.length.toInt()}”x${value.width.toInt()}”x${value.height.toInt()}”", + style: TextStyle(color: labelColor)), + ], + ), ); }).toList(), ), @@ -355,4 +371,11 @@ class _TypeWidgetState extends State { ], ); } + + _manageCartonSize() { + Navigator.push( + context, + CupertinoPageRoute(builder: (context) => CartonSizeList()), + ); + } } diff --git a/lib/pages/carton/model/carton_selection_model.dart b/lib/pages/carton/model/carton_selection_model.dart index 1c776c0..d99fd94 100644 --- a/lib/pages/carton/model/carton_selection_model.dart +++ b/lib/pages/carton/model/carton_selection_model.dart @@ -9,92 +9,36 @@ import '../../main/model/base_model.dart'; class CartonSelectionModel extends BaseModel { final log = Logger("CartonSelectionModel"); - // for search String query = ""; - int offset = 0; - bool reachEnd = false; List cartons = []; + List selectedCartons = []; bool isLoading = false; - - // for default carton DocumentSnapshot? _lastDocument; bool ended = false; - List selectedCartonList = []; - Timer? t; search(String term, {bool imm = false, required String shipmentId}) async { query = term; cartons.clear(); - offset = 0; - reachEnd = false; + _lastDocument = null; + ended = false; + t?.cancel(); t = Timer(Duration(milliseconds: imm ? 0 : 800), () async { - await loadMoreSearch(term: term, shipmentId: shipmentId); + await refresh(shipmentId, term: term); }); } - Future loadMoreSearch( - {required String term, required String shipmentId}) async { - if (term == "") { - await _refresh(shipmentId); - return; - } - // int rowPerPage = 21; - // List list = []; - // SearchPara searchPara = SearchPara(filters: [], term: term); - // isLoading = true; - - // var path = - // "/search/$cartons_collection/${searchPara.escapeTerm}/$rowPerPage/$offset/${searchPara.escapeFilters}"; - - // var result = await requestAPI(path, "GET", - // token: await getToken(), url: Config.instance.searchURL); - - // if (result != null) { - // for (var row in result) { - // var item = ArtistExt.fromMapForSearch(row); - // list.add(item); - // } - // } - - // for (var p in list) { - // selectedArtistList.contains(p) - // ? p.isSelected = true - // : p.isSelected = false; - // } - - // artists.addAll(list); - // offset += rowPerPage; - // if (list.length < rowPerPage) { - // reachEnd = true; - // } - notifyListeners(); - } - - addDefaultCartons(String shipmentId) async { - cartons.clear(); - await _refresh(shipmentId); - } - - selectCarton(Carton a) { - if (a.isSelected) { - selectedCartonList.add(a); - } else { - selectedCartonList.remove(a); - } - } - - Future _refresh(String shipmentId) async { + Future refresh(String shipmentId, {String term = ""}) async { cartons.clear(); _lastDocument = null; ended = false; - await loadMoreData(shipmentId); + await loadMoreData(shipmentId, term: term); notifyListeners(); } - Future loadMoreData(String shipmentId) async { + Future loadMoreData(String shipmentId, {String term = ""}) async { int rowPerPage = 20; try { @@ -104,9 +48,13 @@ class CartonSelectionModel extends BaseModel { .collection(path) // .where("fcs_shipment_id", isEqualTo: shipmentId) // .where("status", isEqualTo: carton_processing_status) - // .where("carton_type", isEqualTo: carton_mix_box) - .where("is_deleted", isEqualTo: false) - .orderBy("created_at", descending: true); + .where("is_deleted", isEqualTo: false); + + if (term != "") { + query = query.where("carton_number", isEqualTo: term); + } + + query = query.orderBy("created_at", descending: true); if (_lastDocument != null) { query = query.startAfterDocument(_lastDocument!); @@ -124,7 +72,7 @@ class CartonSelectionModel extends BaseModel { }).toList(); for (var p in list) { - selectedCartonList.contains(p) + selectedCartons.contains(p) ? p.isSelected = true : p.isSelected = false; } @@ -139,13 +87,21 @@ class CartonSelectionModel extends BaseModel { } } + selectCarton(Carton a) { + if (a.isSelected) { + selectedCartons.add(a); + } else { + selectedCartons.remove(a); + } + } + clearSelection() { - selectedCartonList.clear(); + selectedCartons.clear(); cartons.clear(); query = ""; } addSelectedCarton(List list) { - selectedCartonList = list; + selectedCartons = list; } } diff --git a/lib/pages/carton/model/package_selection_model.dart b/lib/pages/carton/model/package_selection_model.dart index c25e9be..45a061f 100644 --- a/lib/pages/carton/model/package_selection_model.dart +++ b/lib/pages/carton/model/package_selection_model.dart @@ -9,20 +9,14 @@ import '../../main/model/base_model.dart'; class PackageSelectionModel extends BaseModel { final log = Logger("PackageSelectionModel"); - // for search String query = ""; - int offset = 0; - bool reachEnd = false; List packages = []; + List selectedPackages = []; bool isLoading = false; - - // for default package DocumentSnapshot? _lastDocument; bool ended = false; - List selectedPackageList = []; - Timer? t; search(String term, {bool imm = false, @@ -31,11 +25,11 @@ class PackageSelectionModel extends BaseModel { required String consigneeId}) async { query = term; packages.clear(); - offset = 0; - reachEnd = false; + _lastDocument = null; + ended = false; t?.cancel(); t = Timer(Duration(milliseconds: imm ? 0 : 800), () async { - await loadMoreSearch( + await refresh( term: term, shipmentId: shipmentId, consigneeId: consigneeId, @@ -43,85 +37,27 @@ class PackageSelectionModel extends BaseModel { }); } - Future loadMoreSearch( - {required String term, - required String shipmentId, - required String senderId, - required String consigneeId}) async { - if (term == "") { - await _refresh( - shipmentId: shipmentId, senderId: senderId, consigneeId: consigneeId); - return; - } - // int rowPerPage = 21; - // List list = []; - // SearchPara searchPara = SearchPara(filters: [], term: term); - // isLoading = true; - - // var path = - // "/search/$cartons_collection/${searchPara.escapeTerm}/$rowPerPage/$offset/${searchPara.escapeFilters}"; - - // var result = await requestAPI(path, "GET", - // token: await getToken(), url: Config.instance.searchURL); - - // if (result != null) { - // for (var row in result) { - // var item = ArtistExt.fromMapForSearch(row); - // list.add(item); - // } - // } - - // for (var p in list) { - // selectedArtistList.contains(p) - // ? p.isSelected = true - // : p.isSelected = false; - // } - - // artists.addAll(list); - // offset += rowPerPage; - // if (list.length < rowPerPage) { - // reachEnd = true; - // } - notifyListeners(); - } - - addDefaultPackages( + Future refresh( {required String shipmentId, required String senderId, - required String consigneeId}) async { - packages.clear(); - await _refresh( - shipmentId: shipmentId, senderId: senderId, consigneeId: consigneeId); - } - - selectPackage(Package a) { - if (a.isChecked) { - selectedPackageList.add(a); - } else { - selectedPackageList.remove(a); - } - } - - addSelectedPackage(List list){ - selectedPackageList = list; - } - - Future _refresh( - {required String shipmentId, - required String senderId, - required String consigneeId}) async { + required String consigneeId, + String term = ""}) async { packages.clear(); _lastDocument = null; ended = false; await loadMoreData( - shipmentId: shipmentId, senderId: senderId, consigneeId: consigneeId); + shipmentId: shipmentId, + senderId: senderId, + consigneeId: consigneeId, + term: term); notifyListeners(); } Future loadMoreData( {required String shipmentId, required String senderId, - required String consigneeId}) async { + required String consigneeId, + String term = ""}) async { int rowPerPage = 20; try { @@ -131,9 +67,15 @@ class PackageSelectionModel extends BaseModel { .collection(path) // .where("fcs_shipment_id", isEqualTo: shipmentId) // .where("status", isEqualTo: package_processed_status) - .where("user_id", whereIn: [senderId, consigneeId]) - .where("is_deleted", isEqualTo: false) - .orderBy("created_date", descending: true); + .where("sender_id", isEqualTo: senderId) + .where("user_id", isEqualTo: consigneeId) + .where("is_deleted", isEqualTo: false); + + if (term != "") { + query = query.where("tracking_id", isEqualTo: term); + } + + query = query.orderBy("created_date", descending: true); if (_lastDocument != null) { query = query.startAfterDocument(_lastDocument!); @@ -151,9 +93,7 @@ class PackageSelectionModel extends BaseModel { }).toList(); for (var p in list) { - selectedPackageList.contains(p) - ? p.isChecked = true - : p.isChecked = false; + selectedPackages.contains(p) ? p.isChecked = true : p.isChecked = false; } packages.addAll(list); @@ -166,9 +106,43 @@ class PackageSelectionModel extends BaseModel { } } + selectPackage(Package a) { + if (a.isChecked) { + selectedPackages.add(a); + } else { + selectedPackages.remove(a); + } + } + + addSelectedPackage(List list) { + selectedPackages = list; + } + clearSelection() { - selectedPackageList.clear(); + selectedPackages.clear(); packages.clear(); query = ""; } + + Future> getPackagesBySenderAndConsigneeId( + {required String senderId, required String consigneeId}) async { + List list = []; + try { + String path = "/$packages_collection"; + var snaps = await FirebaseFirestore.instance + .collection(path) + .where("sender_id", isEqualTo: senderId) + .where("user_id", isEqualTo: consigneeId) + .where("is_deleted", isEqualTo: false) + .get(const GetOptions(source: Source.server)); + list = snaps.docs + .map((documentSnapshot) => + Package.fromMap(documentSnapshot.data(), documentSnapshot.id)) + .toList(); + } catch (e) { + log.warning("Error!! $e"); + list = []; + } + return list; + } } diff --git a/lib/pages/carton/model/sender_selection_model.dart b/lib/pages/carton/model/sender_selection_model.dart index 705ed6b..e919e11 100644 --- a/lib/pages/carton/model/sender_selection_model.dart +++ b/lib/pages/carton/model/sender_selection_model.dart @@ -43,36 +43,32 @@ class SenderSelectionModel extends BaseModel { await _refresh(); return; } - // int rowPerPage = 21; - // List list = []; - // SearchPara searchPara = SearchPara(filters: [], term: term); - // isLoading = true; - // var path = - // "/search/$cartons_collection/${searchPara.escapeTerm}/$rowPerPage/$offset/${searchPara.escapeFilters}"; + // var bytes = utf8.encode(term); + // var base64Str = base64.encode(bytes); + // HtmlEscape htmlEscape = const HtmlEscape(); + // String escapeSender = htmlEscape.convert(base64Str); - // var result = await requestAPI(path, "GET", - // token: await getToken(), url: Config.instance.searchURL); + // int rowPerPage = 20; + // List list = []; + + // var result = await requestAPI( + // "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET", + // url: Config.instance.reportURL, token: await getToken()); // if (result != null) { // for (var row in result) { - // var item = ArtistExt.fromMapForSearch(row); + // var item = User.fromJson(row); // list.add(item); // } // } - // for (var p in list) { - // selectedArtistList.contains(p) - // ? p.isSelected = true - // : p.isSelected = false; - // } - - // artists.addAll(list); + // _senders.addAll(list); // offset += rowPerPage; // if (list.length < rowPerPage) { // reachEnd = true; // } - notifyListeners(); + // notifyListeners(); } addDefaultSenders() async { diff --git a/lib/pages/carton/package_selection_widget.dart b/lib/pages/carton/package_selection_widget.dart index e84c96f..435ec3d 100644 --- a/lib/pages/carton/package_selection_widget.dart +++ b/lib/pages/carton/package_selection_widget.dart @@ -62,16 +62,17 @@ class _PackageSelectionWidgetState extends State { _init() { var searchModel = context.read(); - - searchModel.addDefaultPackages( - shipmentId: widget.shipment.id!, - consigneeId: widget.consignee.id!, - senderId: widget.sender.id!); - - searchModel.addSelectedPackage(widget.packages); _controller.text = searchModel.query; _query = searchModel.query; + searchModel.refresh( + shipmentId: widget.shipment.id!, + consigneeId: widget.consignee.id!, + senderId: widget.sender.id!, + term: _query); + + searchModel.addSelectedPackage(widget.packages); + if (mounted) { setState(() {}); } @@ -86,22 +87,16 @@ class _PackageSelectionWidgetState extends State { Future _loadMoreData() async { if (_isLoadMore) return; var model = context.read(); - if (model.reachEnd || model.ended) return; + if (model.ended) return; setState(() { _isLoadMore = true; }); - if (_query != "") { - await model.loadMoreSearch( - term: _query, - shipmentId: widget.shipment.id!, - consigneeId: widget.consignee.id!, - senderId: widget.sender.id!); - } else { - await model.loadMoreData( - shipmentId: widget.shipment.id!, - consigneeId: widget.consignee.id!, - senderId: widget.sender.id!); - } + + await model.loadMoreData( + shipmentId: widget.shipment.id!, + consigneeId: widget.consignee.id!, + senderId: widget.sender.id!, + term: _query); setState(() { _isLoadMore = false; @@ -112,7 +107,7 @@ class _PackageSelectionWidgetState extends State { Widget build(BuildContext context) { var model = context.watch(); List searchResults = model.packages; - List selectedPackageList = model.selectedPackageList; + List selectedPackageList = model.selectedPackages; final senderBox = DisplayText( text: widget.sender.name, @@ -278,7 +273,7 @@ class _PackageSelectionWidgetState extends State { isLoadingMore: _isLoadMore, onLoadMore: _loadMoreData, onRefresh: () async { - _search(); + _init(); setState(() { _down = true; }); diff --git a/lib/pages/carton_size/carton_size_list.dart b/lib/pages/carton_size/carton_size_list.dart index 71bbafc..2e97169 100644 --- a/lib/pages/carton_size/carton_size_list.dart +++ b/lib/pages/carton_size/carton_size_list.dart @@ -46,7 +46,7 @@ class _CartonSizeListState extends State { Padding( padding: const EdgeInsets.only(top: 8.0), child: new Text( - "(L${p.length}xW${p.width}xH${p.height})", + "(L${p.length.toInt()}xW${p.width.toInt()}xH${p.height.toInt()})", style: new TextStyle(color: Colors.grey), ), ),