fix carton
This commit is contained in:
@@ -275,7 +275,7 @@
|
|||||||
"box.packages":"Packages",
|
"box.packages":"Packages",
|
||||||
"box.tracking.id":"Tracking ID",
|
"box.tracking.id":"Tracking ID",
|
||||||
"box.market":"Market",
|
"box.market":"Market",
|
||||||
"box.cargo.save.btn":"Save",
|
"box.cargo.save.btn":"Select",
|
||||||
"box.type.title":"Carton types",
|
"box.type.title":"Carton types",
|
||||||
"box.shipment.boxes":"Cartons",
|
"box.shipment.boxes":"Cartons",
|
||||||
"box.shipment_number":"Shipment number",
|
"box.shipment_number":"Shipment number",
|
||||||
|
|||||||
@@ -275,7 +275,7 @@
|
|||||||
"box.packages":"အထုပ်များ",
|
"box.packages":"အထုပ်များ",
|
||||||
"box.tracking.id":"Tracking ID",
|
"box.tracking.id":"Tracking ID",
|
||||||
"box.market":"အွန်လိုင်စျေးဆိုင်",
|
"box.market":"အွန်လိုင်စျေးဆိုင်",
|
||||||
"box.cargo.save.btn":"သိမ်းဆည်းမည်",
|
"box.cargo.save.btn":"ရွေးမည်",
|
||||||
"box.type.title":"သေတ္တာအမျိုးအစားများ",
|
"box.type.title":"သေတ္တာအမျိုးအစားများ",
|
||||||
"box.shipment.boxes":"သေတ္တာများ",
|
"box.shipment.boxes":"သေတ္တာများ",
|
||||||
"box.shipment_number":"ပို့ဆောင်နံပါတ်",
|
"box.shipment_number":"ပို့ဆောင်နံပါတ်",
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ class Carton {
|
|||||||
//for mix box
|
//for mix box
|
||||||
String mixBoxType;
|
String mixBoxType;
|
||||||
List<Carton> mixCartons;
|
List<Carton> mixCartons;
|
||||||
|
List<String> mixCartonIDs;
|
||||||
|
|
||||||
int get amount => rate != null && weight != null ? rate * weight : 0;
|
int get amount => rate != null && weight != null ? rate * weight : 0;
|
||||||
|
|
||||||
@@ -172,10 +173,11 @@ class Carton {
|
|||||||
this.cartonSizeID,
|
this.cartonSizeID,
|
||||||
this.cartonSizeName,
|
this.cartonSizeName,
|
||||||
this.mixBoxType,
|
this.mixBoxType,
|
||||||
this.mixCartons});
|
this.mixCartons,
|
||||||
|
this.mixCartonIDs});
|
||||||
|
|
||||||
Map<String, dynamic> toMap() {
|
Map<String, dynamic> 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 _packages = packages?.map((c) => c.toJson())?.toList();
|
||||||
List _mixCartons = mixCartons?.map((c) => c.toJson())?.toList();
|
List _mixCartons = mixCartons?.map((c) => c.toJson())?.toList();
|
||||||
return {
|
return {
|
||||||
@@ -246,6 +248,7 @@ class Carton {
|
|||||||
senderID: map['sender_id'],
|
senderID: map['sender_id'],
|
||||||
senderFCSID: map['sender_fcs_id'],
|
senderFCSID: map['sender_fcs_id'],
|
||||||
senderName: map['sender_name'],
|
senderName: map['sender_name'],
|
||||||
|
mixCartonIDs: List<String>.from(map['mix_carton_ids'] ?? []),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ class DeliveryAddress {
|
|||||||
String state;
|
String state;
|
||||||
String phoneNumber;
|
String phoneNumber;
|
||||||
bool isDefault;
|
bool isDefault;
|
||||||
|
String userID;
|
||||||
DeliveryAddress(
|
DeliveryAddress(
|
||||||
{this.id,
|
{this.id,
|
||||||
this.fullName,
|
this.fullName,
|
||||||
@@ -15,6 +16,7 @@ class DeliveryAddress {
|
|||||||
this.city,
|
this.city,
|
||||||
this.state,
|
this.state,
|
||||||
this.phoneNumber,
|
this.phoneNumber,
|
||||||
|
this.userID,
|
||||||
this.isDefault = false});
|
this.isDefault = false});
|
||||||
|
|
||||||
factory DeliveryAddress.fromMap(Map<String, dynamic> map, String docID) {
|
factory DeliveryAddress.fromMap(Map<String, dynamic> map, String docID) {
|
||||||
@@ -39,6 +41,7 @@ class DeliveryAddress {
|
|||||||
'city': city,
|
'city': city,
|
||||||
'state': state,
|
'state': state,
|
||||||
'phone_number': phoneNumber,
|
'phone_number': phoneNumber,
|
||||||
|
'user_id': userID,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -98,10 +98,16 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
_selectedCartonType = _carton.cartonType;
|
_selectedCartonType = _carton.cartonType;
|
||||||
_cargoTypes = List.from(_carton.cargoTypes);
|
_cargoTypes = List.from(_carton.cargoTypes);
|
||||||
_isNew = false;
|
_isNew = false;
|
||||||
_user = User(fcsID: _carton.fcsID, name: _carton.userName);
|
_user = User(
|
||||||
consignee =
|
id: _carton.userID, fcsID: _carton.fcsID, name: _carton.userName);
|
||||||
User(fcsID: _carton.receiverFCSID, name: _carton.receiverName);
|
consignee = User(
|
||||||
sender = User(fcsID: _carton.senderID, name: _carton.senderName);
|
id: _carton.receiverID,
|
||||||
|
fcsID: _carton.receiverFCSID,
|
||||||
|
name: _carton.receiverName);
|
||||||
|
sender = User(
|
||||||
|
id: _carton.senderID,
|
||||||
|
fcsID: _carton.senderID,
|
||||||
|
name: _carton.senderName);
|
||||||
_selectedMixBoxType = _carton.mixBoxType ?? "";
|
_selectedMixBoxType = _carton.mixBoxType ?? "";
|
||||||
this._mixCartons =
|
this._mixCartons =
|
||||||
_carton.mixCartons == null ? [] : List.from(_carton.mixCartons);
|
_carton.mixCartons == null ? [] : List.from(_carton.mixCartons);
|
||||||
@@ -268,13 +274,12 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
_isNew
|
_isNew
|
||||||
? IconButton(
|
? IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () =>
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
searchUser(context, callbackUserSelect: (u) {
|
|
||||||
setState(() {
|
setState(() {
|
||||||
this._user = u;
|
this._user = u;
|
||||||
_loadPackages();
|
_loadPackages();
|
||||||
});
|
});
|
||||||
}))
|
}, popPage: true))
|
||||||
: Container(),
|
: 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(
|
final mixcartonTitleBox = Container(
|
||||||
child: LocalTitle(
|
child: LocalTitle(
|
||||||
textKey: "box.mix_caton_title",
|
textKey: "box.mix_caton_title",
|
||||||
@@ -427,7 +462,7 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
final createMixCarton = LocalButton(
|
final createMixCarton = LocalButton(
|
||||||
textKey: _isNew ? "box.mix_carton_btn" : "box.cargo.save.btn",
|
textKey: _isNew ? "box.mix_carton_btn" : "btn.save",
|
||||||
callBack: _creatMixCarton,
|
callBack: _creatMixCarton,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -441,11 +476,11 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
this.consignee = u;
|
this.consignee = u;
|
||||||
});
|
});
|
||||||
})),
|
}, popPage: true)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -475,11 +510,11 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
this.sender = u;
|
this.sender = u;
|
||||||
});
|
});
|
||||||
})),
|
}, popPage: true)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -537,7 +572,11 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
cartonTypeBox,
|
cartonTypeBox,
|
||||||
LocalTitle(textKey: "box.shipment_info"),
|
LocalTitle(textKey: "box.shipment_info"),
|
||||||
_isNew ? fcsShipmentsBox : shipmentBox,
|
_isNew ? fcsShipmentsBox : shipmentBox,
|
||||||
isMixBox ? mixTypeBox : Container(),
|
isMixBox
|
||||||
|
? _isNew
|
||||||
|
? mixTypeBox
|
||||||
|
: mixTypeDisplayBox
|
||||||
|
: Container(),
|
||||||
...(isMixBox
|
...(isMixBox
|
||||||
? [
|
? [
|
||||||
mixcartonTitleBox,
|
mixcartonTitleBox,
|
||||||
@@ -647,8 +686,11 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
Carton _c = await Navigator.push(
|
Carton _c = await Navigator.push(
|
||||||
context,
|
context,
|
||||||
CupertinoPageRoute(
|
CupertinoPageRoute(
|
||||||
builder: (context) =>
|
builder: (context) => PackageCartonEditor(
|
||||||
PackageCartonEditor(carton: c.value, isNew: false)),
|
carton: c.value,
|
||||||
|
isNew: false,
|
||||||
|
consignee: _user,
|
||||||
|
)),
|
||||||
);
|
);
|
||||||
if (_c == null) return;
|
if (_c == null) return;
|
||||||
cartons.removeWhere((item) => item.id == _c.id);
|
cartons.removeWhere((item) => item.id == _c.id);
|
||||||
@@ -826,8 +868,11 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
Carton _c = await Navigator.push(
|
Carton _c = await Navigator.push(
|
||||||
context,
|
context,
|
||||||
CupertinoPageRoute(
|
CupertinoPageRoute(
|
||||||
builder: (context) =>
|
builder: (context) => PackageCartonEditor(
|
||||||
PackageCartonEditor(carton: carton, isNew: _isNew)),
|
carton: carton,
|
||||||
|
isNew: _isNew,
|
||||||
|
consignee: _user,
|
||||||
|
)),
|
||||||
);
|
);
|
||||||
if (_c == null) return;
|
if (_c == null) return;
|
||||||
var cartonModel = Provider.of<CartonModel>(context, listen: false);
|
var cartonModel = Provider.of<CartonModel>(context, listen: false);
|
||||||
@@ -882,9 +927,9 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
CartonModel cartonModel =
|
CartonModel cartonModel =
|
||||||
Provider.of<CartonModel>(context, listen: false);
|
Provider.of<CartonModel>(context, listen: false);
|
||||||
if (_isNew) {
|
if (_isNew) {
|
||||||
await cartonModel.createMixCarton(carton);
|
await cartonModel.createCarton(carton);
|
||||||
} else {
|
} else {
|
||||||
await cartonModel.updateMixCarton(carton);
|
await cartonModel.updateCarton(carton);
|
||||||
}
|
}
|
||||||
Navigator.pop(context, true);
|
Navigator.pop(context, true);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ class _CartonInfoState extends State<CartonInfo> {
|
|||||||
double volumetricRatio = 0;
|
double volumetricRatio = 0;
|
||||||
double shipmentWeight = 0;
|
double shipmentWeight = 0;
|
||||||
String selectMixBoxType;
|
String selectMixBoxType;
|
||||||
List<Carton> _mixCartons = [];
|
|
||||||
|
|
||||||
bool isMixBox;
|
bool isMixBox;
|
||||||
bool isFromShipments;
|
bool isFromShipments;
|
||||||
@@ -76,6 +75,7 @@ class _CartonInfoState extends State<CartonInfo> {
|
|||||||
|
|
||||||
_updateBoxData();
|
_updateBoxData();
|
||||||
_loadPackages();
|
_loadPackages();
|
||||||
|
_loadMixCartons();
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateBoxData() {
|
_updateBoxData() {
|
||||||
@@ -93,7 +93,6 @@ class _CartonInfoState extends State<CartonInfo> {
|
|||||||
isEdiable = (isFromPackages || isMixBox || isFromCartons) &&
|
isEdiable = (isFromPackages || isMixBox || isFromCartons) &&
|
||||||
_box.status == carton_packed_status;
|
_box.status == carton_packed_status;
|
||||||
selectMixBoxType = _box.mixBoxType ?? "";
|
selectMixBoxType = _box.mixBoxType ?? "";
|
||||||
_mixCartons = _box.mixCartons == null ? [] : _box.mixCartons;
|
|
||||||
getCartonSize();
|
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() {
|
_calShipmentWeight() {
|
||||||
double l = double.parse(_lengthController.text, (s) => 0);
|
double l = double.parse(_lengthController.text, (s) => 0);
|
||||||
double w = double.parse(_widthController.text, (s) => 0);
|
double w = double.parse(_widthController.text, (s) => 0);
|
||||||
@@ -356,7 +369,7 @@ class _CartonInfoState extends State<CartonInfo> {
|
|||||||
isMixBox ? mixTypeBox : Container(),
|
isMixBox ? mixTypeBox : Container(),
|
||||||
isMixBox ? LocalTitle(textKey: "box.mix_caton_title") : Container(),
|
isMixBox ? LocalTitle(textKey: "box.mix_caton_title") : Container(),
|
||||||
isMixBox
|
isMixBox
|
||||||
? Column(children: _getCartons(context, this._mixCartons))
|
? Column(children: _getCartons(context, _box.mixCartons))
|
||||||
: Container(),
|
: Container(),
|
||||||
isFromPackages || isSmallBag
|
isFromPackages || isSmallBag
|
||||||
? CartonPackageTable(
|
? CartonPackageTable(
|
||||||
@@ -397,6 +410,7 @@ class _CartonInfoState extends State<CartonInfo> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_gotoEditor() async {
|
_gotoEditor() async {
|
||||||
|
widget.box.mixCartons=_box.mixCartons;
|
||||||
bool updated = await Navigator.push<bool>(
|
bool updated = await Navigator.push<bool>(
|
||||||
context,
|
context,
|
||||||
CupertinoPageRoute(builder: (context) => CartonEditor(box: widget.box)),
|
CupertinoPageRoute(builder: (context) => CartonEditor(box: widget.box)),
|
||||||
@@ -406,9 +420,10 @@ class _CartonInfoState extends State<CartonInfo> {
|
|||||||
var c = await cartonModel.getCarton(widget.box.id);
|
var c = await cartonModel.getCarton(widget.box.id);
|
||||||
setState(() {
|
setState(() {
|
||||||
_box = c;
|
_box = c;
|
||||||
|
_loadPackages();
|
||||||
|
_loadMixCartons();
|
||||||
_updateBoxData();
|
_updateBoxData();
|
||||||
});
|
});
|
||||||
_loadPackages();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class CartonModel extends BaseModel {
|
|||||||
|
|
||||||
List<String> cartonTypes = [
|
List<String> cartonTypes = [
|
||||||
carton_from_packages,
|
carton_from_packages,
|
||||||
carton_from_cargos,
|
// carton_from_cargos,
|
||||||
carton_mix_box
|
carton_mix_box
|
||||||
];
|
];
|
||||||
List<String> mixBoxTypes = [mix_delivery, mix_pickup];
|
List<String> mixBoxTypes = [mix_delivery, mix_pickup];
|
||||||
@@ -262,11 +262,4 @@ class CartonModel extends BaseModel {
|
|||||||
return Services.instance.cartonService.searchCarton(term);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'package:fcs/domain/entities/carton.dart';
|
|||||||
import 'package:fcs/domain/entities/cargo_type.dart';
|
import 'package:fcs/domain/entities/cargo_type.dart';
|
||||||
import 'package:fcs/domain/entities/carton_size.dart';
|
import 'package:fcs/domain/entities/carton_size.dart';
|
||||||
import 'package:fcs/domain/entities/package.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/domain/vo/delivery_address.dart';
|
||||||
import 'package:fcs/helpers/theme.dart';
|
import 'package:fcs/helpers/theme.dart';
|
||||||
import 'package:fcs/pages/carton_size/carton_size_list.dart';
|
import 'package:fcs/pages/carton_size/carton_size_list.dart';
|
||||||
@@ -30,7 +31,8 @@ import 'model/carton_model.dart';
|
|||||||
class PackageCartonEditor extends StatefulWidget {
|
class PackageCartonEditor extends StatefulWidget {
|
||||||
final Carton carton;
|
final Carton carton;
|
||||||
final bool isNew;
|
final bool isNew;
|
||||||
PackageCartonEditor({this.carton, this.isNew});
|
final User consignee;
|
||||||
|
PackageCartonEditor({this.carton, this.isNew, this.consignee});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_PackageCartonEditorState createState() => _PackageCartonEditorState();
|
_PackageCartonEditorState createState() => _PackageCartonEditorState();
|
||||||
@@ -200,7 +202,9 @@ class _PackageCartonEditorState extends State<PackageCartonEditor> {
|
|||||||
CupertinoPageRoute(
|
CupertinoPageRoute(
|
||||||
builder: (context) => DeliveryAddressSelection(
|
builder: (context) => DeliveryAddressSelection(
|
||||||
deliveryAddress: _deliveryAddress,
|
deliveryAddress: _deliveryAddress,
|
||||||
deliveryAddresses: this._deliveryAddresses)),
|
deliveryAddresses: this._deliveryAddresses,
|
||||||
|
user: widget.consignee,
|
||||||
|
)),
|
||||||
);
|
);
|
||||||
if (d == null) return;
|
if (d == null) return;
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class _CustomerListState extends State<CustomerList> {
|
|||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: Colors.white),
|
icon: Icon(Icons.search, color: Colors.white),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
_select(u);
|
_select(u);
|
||||||
})),
|
})),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:fcs/domain/entities/user.dart';
|
||||||
import 'package:fcs/domain/vo/delivery_address.dart';
|
import 'package:fcs/domain/vo/delivery_address.dart';
|
||||||
import 'package:fcs/helpers/theme.dart';
|
import 'package:fcs/helpers/theme.dart';
|
||||||
import 'package:fcs/pages/delivery_address/model/delivery_address_model.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 {
|
class DeliveryAddressEditor extends StatefulWidget {
|
||||||
final DeliveryAddress deliveryAddress;
|
final DeliveryAddress deliveryAddress;
|
||||||
DeliveryAddressEditor({this.deliveryAddress});
|
final User user;
|
||||||
|
DeliveryAddressEditor({this.deliveryAddress, this.user});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_DeliveryAddressEditorState createState() => _DeliveryAddressEditorState();
|
_DeliveryAddressEditorState createState() => _DeliveryAddressEditorState();
|
||||||
@@ -195,6 +197,9 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
if (!valid) {
|
if (!valid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (widget.user != null) {
|
||||||
|
deliveryAddress.userID = widget.user.id;
|
||||||
|
}
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoading = true;
|
_isLoading = true;
|
||||||
});
|
});
|
||||||
@@ -202,7 +207,7 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
Provider.of<DeliveryAddressModel>(context, listen: false);
|
Provider.of<DeliveryAddressModel>(context, listen: false);
|
||||||
try {
|
try {
|
||||||
await deliveryAddressModel.createDeliveryAddress(deliveryAddress);
|
await deliveryAddressModel.createDeliveryAddress(deliveryAddress);
|
||||||
Navigator.pop(context);
|
Navigator.pop(context,true);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showMsgDialog(context, "Error", e.toString());
|
showMsgDialog(context, "Error", e.toString());
|
||||||
} finally {
|
} finally {
|
||||||
@@ -225,7 +230,7 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
Provider.of<DeliveryAddressModel>(context, listen: false);
|
Provider.of<DeliveryAddressModel>(context, listen: false);
|
||||||
try {
|
try {
|
||||||
await deliveryAddressModel.updateDeliveryAddress(deliveryAddress);
|
await deliveryAddressModel.updateDeliveryAddress(deliveryAddress);
|
||||||
Navigator.pop(context);
|
Navigator.pop(context,true);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showMsgDialog(context, "Error", e.toString());
|
showMsgDialog(context, "Error", e.toString());
|
||||||
} finally {
|
} finally {
|
||||||
@@ -247,7 +252,7 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
DeliveryAddressModel deliveryAddressModel =
|
DeliveryAddressModel deliveryAddressModel =
|
||||||
Provider.of<DeliveryAddressModel>(context, listen: false);
|
Provider.of<DeliveryAddressModel>(context, listen: false);
|
||||||
await deliveryAddressModel.deleteDeliveryAddress(_deliveryAddress);
|
await deliveryAddressModel.deleteDeliveryAddress(_deliveryAddress);
|
||||||
Navigator.pop(context);
|
Navigator.pop(context,true);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showMsgDialog(context, "Error", e.toString());
|
showMsgDialog(context, "Error", e.toString());
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -77,12 +77,12 @@ class _DiscountEditorState extends State<DiscountEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
customerId = u.id;
|
customerId = u.id;
|
||||||
customerName = u.name;
|
customerName = u.name;
|
||||||
});
|
});
|
||||||
})),
|
},popPage: true)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class _PackageNewState extends State<PackageNew> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
this.user = u;
|
this.user = u;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:fcs/domain/constants.dart';
|
||||||
import 'package:fcs/domain/entities/market.dart';
|
import 'package:fcs/domain/entities/market.dart';
|
||||||
import 'package:fcs/domain/entities/package.dart';
|
import 'package:fcs/domain/entities/package.dart';
|
||||||
import 'package:fcs/domain/entities/user.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/model/package_model.dart';
|
||||||
import 'package:fcs/pages/package/tracking_id_page.dart';
|
import 'package:fcs/pages/package/tracking_id_page.dart';
|
||||||
import 'package:fcs/pages/main/util.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/barcode_scanner.dart';
|
||||||
|
import 'package:fcs/pages/widgets/display_text.dart';
|
||||||
import 'package:fcs/pages/widgets/input_text.dart';
|
import 'package:fcs/pages/widgets/input_text.dart';
|
||||||
import 'package:fcs/pages/widgets/local_text.dart';
|
import 'package:fcs/pages/widgets/local_text.dart';
|
||||||
import 'package:fcs/pages/widgets/multi_img_controller.dart';
|
import 'package:fcs/pages/widgets/multi_img_controller.dart';
|
||||||
@@ -32,59 +35,60 @@ class PackageEditor extends StatefulWidget {
|
|||||||
class _PackageEditorState extends State<PackageEditor> {
|
class _PackageEditorState extends State<PackageEditor> {
|
||||||
TextEditingController _remarkCtl = new TextEditingController();
|
TextEditingController _remarkCtl = new TextEditingController();
|
||||||
TextEditingController _descCtl = new TextEditingController();
|
TextEditingController _descCtl = new TextEditingController();
|
||||||
TextEditingController _trackingIDCtl = new TextEditingController();
|
|
||||||
|
|
||||||
bool _isLoading = false;
|
bool _isLoading = false;
|
||||||
bool _isNew;
|
|
||||||
MultiImgController multiImgController = MultiImgController();
|
MultiImgController multiImgController = MultiImgController();
|
||||||
Package _package = Package();
|
Package _package;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
if (widget.package != null) {
|
_package = Package();
|
||||||
_isNew = false;
|
_loadPackageData(null);
|
||||||
_package = widget.package;
|
}
|
||||||
_trackingIDCtl.text = _package.trackingID;
|
|
||||||
|
|
||||||
|
_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 ?? "";
|
selectedMarket = _package.market ?? "";
|
||||||
_descCtl.text = _package.desc;
|
_descCtl.text = _package.desc;
|
||||||
_remarkCtl.text = _package.remark;
|
_remarkCtl.text = _package.remark;
|
||||||
multiImgController.setImageFiles = _package.photoFiles;
|
multiImgController.setImageUrls = _package.photoUrls;
|
||||||
} else {
|
});
|
||||||
_isNew = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final trackingIDBox = Container(
|
var trackingIDBox = Row(
|
||||||
child: Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Expanded(
|
Expanded(
|
||||||
child: InputText(
|
child: DisplayText(
|
||||||
iconData: MaterialCommunityIcons.barcode_scan,
|
text: _package.trackingID,
|
||||||
labelTextKey: "processing.tracking.id",
|
labelTextKey: "processing.tracking.id",
|
||||||
controller: _trackingIDCtl,
|
iconData: MaterialCommunityIcons.barcode_scan,
|
||||||
)),
|
)),
|
||||||
InkWell(
|
IconButton(
|
||||||
onTap: _scan,
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
child: Padding(
|
onPressed: () => searchPackage(context, callbackPackageSelect: (u) {
|
||||||
padding: const EdgeInsets.all(8.0),
|
_loadPackageData(u.id);
|
||||||
child: Column(
|
Navigator.pop(context);
|
||||||
children: [
|
})),
|
||||||
Icon(
|
|
||||||
MaterialCommunityIcons.barcode_scan,
|
|
||||||
color: primaryColor,
|
|
||||||
),
|
|
||||||
Text("Scan")
|
|
||||||
],
|
],
|
||||||
),
|
);
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
));
|
|
||||||
|
|
||||||
final descBox = InputText(
|
final descBox = InputText(
|
||||||
labelTextKey: 'processing.desc',
|
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 {
|
_selectPackage() async {
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoading = true;
|
_isLoading = true;
|
||||||
@@ -275,22 +254,17 @@ class _PackageEditorState extends State<PackageEditor> {
|
|||||||
PackageModel packageModel =
|
PackageModel packageModel =
|
||||||
Provider.of<PackageModel>(context, listen: false);
|
Provider.of<PackageModel>(context, listen: false);
|
||||||
try {
|
try {
|
||||||
Package package =
|
_package.market = selectedMarket;
|
||||||
await packageModel.getPackageByTrackingID(_trackingIDCtl.text);
|
_package.desc = _descCtl.text;
|
||||||
package.trackingID = _trackingIDCtl.text;
|
_package.remark = _remarkCtl.text;
|
||||||
package.market = selectedMarket;
|
_package.photoFiles = multiImgController.getUpdatedFile;
|
||||||
package.desc = _descCtl.text;
|
_package.fcsID = widget.consignee.fcsID;
|
||||||
package.remark = _remarkCtl.text;
|
_package.senderFCSID = widget.sender?.fcsID;
|
||||||
package.photoFiles = _isNew
|
|
||||||
? multiImgController.getAddedFile
|
|
||||||
: multiImgController.getUpdatedFile;
|
|
||||||
package.fcsID = widget.consignee.fcsID;
|
|
||||||
package.senderFCSID = widget.sender?.fcsID;
|
|
||||||
|
|
||||||
await packageModel.updateProcessing(package,
|
await packageModel.updateProcessing(_package,
|
||||||
multiImgController.getAddedFile, multiImgController.getDeletedUrl);
|
multiImgController.getAddedFile, multiImgController.getDeletedUrl);
|
||||||
|
|
||||||
Navigator.pop<Package>(context, package);
|
Navigator.pop<Package>(context, _package);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showMsgDialog(context, "Error", e.toString());
|
showMsgDialog(context, "Error", e.toString());
|
||||||
} finally {
|
} finally {
|
||||||
@@ -301,8 +275,7 @@ class _PackageEditorState extends State<PackageEditor> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isDataChanged() {
|
isDataChanged() {
|
||||||
return _trackingIDCtl.text != "" ||
|
return selectedMarket != null ||
|
||||||
selectedMarket != null ||
|
|
||||||
_descCtl.text != "" ||
|
_descCtl.text != "" ||
|
||||||
_remarkCtl.text != "" ||
|
_remarkCtl.text != "" ||
|
||||||
multiImgController.getAddedFile.isNotEmpty;
|
multiImgController.getAddedFile.isNotEmpty;
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
this._user = u;
|
this._user = u;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -62,11 +62,11 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
this.consignee = u;
|
this.consignee = u;
|
||||||
});
|
});
|
||||||
})),
|
}, popPage: true)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -104,11 +104,11 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
this.sender = u;
|
this.sender = u;
|
||||||
});
|
});
|
||||||
})),
|
}, popPage: true)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -148,7 +148,8 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
|||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
if (this.consignee == null) {
|
if (this.consignee == null) {
|
||||||
showMsgDialog(context, "Warning", "Please select 'Consignee'");
|
showMsgDialog(
|
||||||
|
context, "Warning", "Please select 'Consignee'");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Package _package = await Navigator.push<Package>(
|
Package _package = await Navigator.push<Package>(
|
||||||
@@ -181,13 +182,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
|
|||||||
icon:
|
icon:
|
||||||
new Icon(CupertinoIcons.back, color: primaryColor, size: 30),
|
new Icon(CupertinoIcons.back, color: primaryColor, size: 30),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
if (isDataChanged()) {
|
|
||||||
showConfirmDialog(context, "back.button_confirm", () {
|
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Navigator.of(context).pop();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
shadowColor: Colors.transparent,
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ class _ProcessingEditorState extends State<ProcessingEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
this._user = u;
|
this._user = u;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -77,11 +77,11 @@ class _ReceivingEditorState extends State<ReceivingEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: primaryColor),
|
icon: Icon(Icons.search, color: primaryColor),
|
||||||
onPressed: () => searchUser(context, callbackUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) {
|
||||||
setState(() {
|
setState(() {
|
||||||
this.user = u;
|
this.user = u;
|
||||||
});
|
});
|
||||||
})),
|
},popPage: true)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import 'package:fcs/pages/user_search/user_serach.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class UserListRow extends StatefulWidget {
|
class UserListRow extends StatefulWidget {
|
||||||
final CallbackUserSelect callbackUserSelect;
|
final OnUserRowSelect onUserRowSelect;
|
||||||
final User user;
|
final User user;
|
||||||
const UserListRow({this.user, this.callbackUserSelect});
|
const UserListRow({this.user, this.onUserRowSelect});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_UserListRowState createState() => _UserListRowState();
|
_UserListRowState createState() => _UserListRowState();
|
||||||
@@ -30,9 +30,8 @@ class _UserListRowState extends State<UserListRow> {
|
|||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.pop(context);
|
if (widget.onUserRowSelect != null)
|
||||||
if (widget.callbackUserSelect != null)
|
widget.onUserRowSelect(widget.user);
|
||||||
widget.callbackUserSelect(widget.user);
|
|
||||||
},
|
},
|
||||||
child: Row(
|
child: Row(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
|
|||||||
@@ -5,19 +5,22 @@ import 'package:fcs/pages/user_search/user_list_row.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
typedef CallbackUserSelect(User suer);
|
typedef OnUserSelect(User suer);
|
||||||
|
typedef OnUserRowSelect(User suer);
|
||||||
|
|
||||||
Future<User> searchUser(BuildContext context,
|
Future<User> searchUser(BuildContext context,
|
||||||
{CallbackUserSelect callbackUserSelect}) async =>
|
{OnUserSelect onUserSelect, bool popPage = false}) async =>
|
||||||
await showSearch<User>(
|
await showSearch<User>(
|
||||||
context: context,
|
context: context,
|
||||||
delegate: UserSearchDelegate(callbackUserSelect: callbackUserSelect),
|
delegate:
|
||||||
|
UserSearchDelegate(onUserSelect: onUserSelect, popPage: popPage),
|
||||||
);
|
);
|
||||||
|
|
||||||
class UserSearchDelegate extends SearchDelegate<User> {
|
class UserSearchDelegate extends SearchDelegate<User> {
|
||||||
final CallbackUserSelect callbackUserSelect;
|
final OnUserSelect onUserSelect;
|
||||||
|
final bool popPage;
|
||||||
|
|
||||||
UserSearchDelegate({this.callbackUserSelect});
|
UserSearchDelegate({this.onUserSelect, this.popPage});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get searchFieldLabel => 'Search by FCS ID or Name';
|
String get searchFieldLabel => 'Search by FCS ID or Name';
|
||||||
@@ -77,7 +80,7 @@ class UserSearchDelegate extends SearchDelegate<User> {
|
|||||||
children: snapshot.data
|
children: snapshot.data
|
||||||
.map((u) => UserListRow(
|
.map((u) => UserListRow(
|
||||||
user: u,
|
user: u,
|
||||||
callbackUserSelect: callbackUserSelect,
|
onUserRowSelect: (u) => _onUserRowSelect(context, u),
|
||||||
))
|
))
|
||||||
.toList(),
|
.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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:fcs/domain/entities/user.dart';
|
||||||
import 'package:fcs/domain/vo/delivery_address.dart';
|
import 'package:fcs/domain/vo/delivery_address.dart';
|
||||||
import 'package:fcs/helpers/theme.dart';
|
import 'package:fcs/helpers/theme.dart';
|
||||||
import 'package:fcs/pages/delivery_address/delivery_address_editor.dart';
|
import 'package:fcs/pages/delivery_address/delivery_address_editor.dart';
|
||||||
@@ -9,9 +10,10 @@ import 'package:flutter/material.dart';
|
|||||||
class DeliveryAddressSelection extends StatelessWidget {
|
class DeliveryAddressSelection extends StatelessWidget {
|
||||||
final DeliveryAddress deliveryAddress;
|
final DeliveryAddress deliveryAddress;
|
||||||
final List<DeliveryAddress> deliveryAddresses;
|
final List<DeliveryAddress> deliveryAddresses;
|
||||||
|
final User user;
|
||||||
|
|
||||||
const DeliveryAddressSelection(
|
const DeliveryAddressSelection(
|
||||||
{Key key, this.deliveryAddress, this.deliveryAddresses})
|
{Key key, this.deliveryAddress, this.deliveryAddresses, this.user})
|
||||||
: super(key: key);
|
: super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -29,9 +31,11 @@ class DeliveryAddressSelection extends StatelessWidget {
|
|||||||
color: primaryColor, fontSize: 20),
|
color: primaryColor, fontSize: 20),
|
||||||
),
|
),
|
||||||
floatingActionButton: FloatingActionButton.extended(
|
floatingActionButton: FloatingActionButton.extended(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
Navigator.of(context).push(CupertinoPageRoute(
|
Navigator.of(context).push(CupertinoPageRoute(
|
||||||
builder: (context) => DeliveryAddressEditor()));
|
builder: (context) => DeliveryAddressEditor(
|
||||||
|
user: user,
|
||||||
|
)));
|
||||||
},
|
},
|
||||||
icon: Icon(Icons.add),
|
icon: Icon(Icons.add),
|
||||||
label: LocalText(context, "delivery_address.new_address",
|
label: LocalText(context, "delivery_address.new_address",
|
||||||
|
|||||||
Reference in New Issue
Block a user