fix carton

This commit is contained in:
2021-01-10 15:56:27 +06:30
parent 83cea10328
commit 4839109280
21 changed files with 201 additions and 162 deletions

View File

@@ -98,10 +98,16 @@ class _CartonEditorState extends State<CartonEditor> {
_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<CartonEditor> {
_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<CartonEditor> {
),
);
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<CartonEditor> {
);
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<CartonEditor> {
)),
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<CartonEditor> {
)),
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<CartonEditor> {
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<CartonEditor> {
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<CartonEditor> {
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<CartonModel>(context, listen: false);
@@ -882,9 +927,9 @@ class _CartonEditorState extends State<CartonEditor> {
CartonModel cartonModel =
Provider.of<CartonModel>(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) {

View File

@@ -51,7 +51,6 @@ class _CartonInfoState extends State<CartonInfo> {
double volumetricRatio = 0;
double shipmentWeight = 0;
String selectMixBoxType;
List<Carton> _mixCartons = [];
bool isMixBox;
bool isFromShipments;
@@ -76,6 +75,7 @@ class _CartonInfoState extends State<CartonInfo> {
_updateBoxData();
_loadPackages();
_loadMixCartons();
}
_updateBoxData() {
@@ -93,7 +93,6 @@ class _CartonInfoState extends State<CartonInfo> {
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<CartonInfo> {
});
}
_loadMixCartons() async {
if (_box.cartonType != carton_mix_box) return;
CartonModel cartonModel = Provider.of<CartonModel>(context, listen: false);
List<Carton> 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<CartonInfo> {
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<CartonInfo> {
}
_gotoEditor() async {
widget.box.mixCartons=_box.mixCartons;
bool updated = await Navigator.push<bool>(
context,
CupertinoPageRoute(builder: (context) => CartonEditor(box: widget.box)),
@@ -406,9 +420,10 @@ class _CartonInfoState extends State<CartonInfo> {
var c = await cartonModel.getCarton(widget.box.id);
setState(() {
_box = c;
_loadPackages();
_loadMixCartons();
_updateBoxData();
});
_loadPackages();
}
}

View File

@@ -60,7 +60,7 @@ class CartonModel extends BaseModel {
List<String> cartonTypes = [
carton_from_packages,
carton_from_cargos,
// carton_from_cargos,
carton_mix_box
];
List<String> mixBoxTypes = [mix_delivery, mix_pickup];
@@ -262,11 +262,4 @@ class CartonModel extends BaseModel {
return Services.instance.cartonService.searchCarton(term);
}
Future<Carton> createMixCarton(Carton carton) {
// return Services.instance.cartonService.createCarton(carton);
}
Future<void> updateMixCarton(Carton carton) {
// return Services.instance.cartonService.updateCarton(carton);
}
}

View File

@@ -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<PackageCartonEditor> {
context,
CupertinoPageRoute(
builder: (context) => DeliveryAddressSelection(
deliveryAddress: _deliveryAddress,
deliveryAddresses: this._deliveryAddresses)),
deliveryAddress: _deliveryAddress,
deliveryAddresses: this._deliveryAddresses,
user: widget.consignee,
)),
);
if (d == null) return;
setState(() {

View File

@@ -43,7 +43,7 @@ class _CustomerListState extends State<CustomerList> {
actions: <Widget>[
IconButton(
icon: Icon(Icons.search, color: Colors.white),
onPressed: () => searchUser(context, callbackUserSelect: (u) {
onPressed: () => searchUser(context, onUserSelect: (u) {
_select(u);
})),
],

View File

@@ -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<DeliveryAddressEditor> {
if (!valid) {
return;
}
if (widget.user != null) {
deliveryAddress.userID = widget.user.id;
}
setState(() {
_isLoading = true;
});
@@ -202,7 +207,7 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
Provider.of<DeliveryAddressModel>(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<DeliveryAddressEditor> {
Provider.of<DeliveryAddressModel>(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<DeliveryAddressEditor> {
DeliveryAddressModel deliveryAddressModel =
Provider.of<DeliveryAddressModel>(context, listen: false);
await deliveryAddressModel.deleteDeliveryAddress(_deliveryAddress);
Navigator.pop(context);
Navigator.pop(context,true);
} catch (e) {
showMsgDialog(context, "Error", e.toString());
} finally {

View File

@@ -77,12 +77,12 @@ class _DiscountEditorState extends State<DiscountEditor> {
)),
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)),
],
);

View File

@@ -23,7 +23,7 @@ class PackageListRow extends StatelessWidget {
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
onTap: () {
if (callbackPackageSelect != null) {
callbackPackageSelect(package);
return;

View File

@@ -47,7 +47,7 @@ class _PackageNewState extends State<PackageNew> {
)),
IconButton(
icon: Icon(Icons.search, color: primaryColor),
onPressed: () => searchUser(context, callbackUserSelect: (u) {
onPressed: () => searchUser(context, onUserSelect: (u) {
setState(() {
this.user = u;
});

View File

@@ -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<PackageEditor> {
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<PackageModel>(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: <Widget>[
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<PackageEditor> {
);
}
_scan() async {
PermissionStatus permission =
await PermissionHandler().checkPermissionStatus(PermissionGroup.camera);
if (permission != PermissionStatus.granted) {
Map<PermissionGroup, PermissionStatus> 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<PackageEditor> {
PackageModel packageModel =
Provider.of<PackageModel>(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<Package>(context, package);
Navigator.pop<Package>(context, _package);
} catch (e) {
showMsgDialog(context, "Error", e.toString());
} finally {
@@ -301,8 +275,7 @@ class _PackageEditorState extends State<PackageEditor> {
}
isDataChanged() {
return _trackingIDCtl.text != "" ||
selectedMarket != null ||
return selectedMarket != null ||
_descCtl.text != "" ||
_remarkCtl.text != "" ||
multiImgController.getAddedFile.isNotEmpty;

View File

@@ -68,7 +68,7 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
)),
IconButton(
icon: Icon(Icons.search, color: primaryColor),
onPressed: () => searchUser(context, callbackUserSelect: (u) {
onPressed: () => searchUser(context, onUserSelect: (u) {
setState(() {
this._user = u;
});

View File

@@ -62,11 +62,11 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
)),
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<ProcesingEditor> {
)),
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<ProcesingEditor> {
),
onPressed: () async {
if (this.consignee == null) {
showMsgDialog(context, "Warning", "Please select 'Consignee'");
showMsgDialog(
context, "Warning", "Please select 'Consignee'");
return;
}
Package _package = await Navigator.push<Package>(
@@ -181,13 +182,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
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<ProcesingEditor> {
});
}
}
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);
}
}
}

View File

@@ -69,7 +69,7 @@ class _ProcessingEditorState extends State<ProcessingEditor> {
)),
IconButton(
icon: Icon(Icons.search, color: primaryColor),
onPressed: () => searchUser(context, callbackUserSelect: (u) {
onPressed: () => searchUser(context, onUserSelect: (u) {
setState(() {
this._user = u;
});

View File

@@ -77,11 +77,11 @@ class _ReceivingEditorState extends State<ReceivingEditor> {
)),
IconButton(
icon: Icon(Icons.search, color: primaryColor),
onPressed: () => searchUser(context, callbackUserSelect: (u) {
onPressed: () => searchUser(context, onUserSelect: (u) {
setState(() {
this.user = u;
});
})),
},popPage: true)),
],
);

View File

@@ -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<UserListRow> {
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: <Widget>[

View File

@@ -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<User> searchUser(BuildContext context,
{CallbackUserSelect callbackUserSelect}) async =>
{OnUserSelect onUserSelect, bool popPage = false}) async =>
await showSearch<User>(
context: context,
delegate: UserSearchDelegate(callbackUserSelect: callbackUserSelect),
delegate:
UserSearchDelegate(onUserSelect: onUserSelect, popPage: popPage),
);
class UserSearchDelegate extends SearchDelegate<User> {
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<User> {
children: snapshot.data
.map((u) => UserListRow(
user: u,
callbackUserSelect: callbackUserSelect,
onUserRowSelect: (u) => _onUserRowSelect(context, u),
))
.toList(),
),
@@ -113,4 +116,13 @@ class UserSearchDelegate extends SearchDelegate<User> {
),
);
}
_onUserRowSelect(BuildContext context, User user) {
if (onUserSelect != null) {
onUserSelect(user);
}
if (popPage) {
Navigator.pop(context);
}
}
}

View File

@@ -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<DeliveryAddress> 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",