add packages

This commit is contained in:
Sai Naw Wun
2020-06-03 00:42:31 +06:30
parent d41d48b405
commit c84e1beb9d
22 changed files with 439 additions and 265 deletions

View File

@@ -104,7 +104,7 @@
"reg.confirm":"Submit Registration?", "reg.confirm":"Submit Registration?",
"reg.date":"Registeration Date", "reg.date":"Registeration Date",
"profile.title": "FCS Profile", "profile.title": "Profile",
"profile.edit_title": "Edit FCS Profile", "profile.edit_title": "Edit FCS Profile",
"profile.name": "Name", "profile.name": "Name",
"profile.phone": "Phone", "profile.phone": "Phone",
@@ -552,7 +552,8 @@
"contact": "CONTACTS", "contact": "CONTACTS",
"fcs.profile": "PROFILE", "fcs.btn": "FCS Profile",
"fcs.profile": "FCS PROFILE",
"contact.usa.phone": "USA Phone", "contact.usa.phone": "USA Phone",
"contact.mm.phone": "Myanmar Phone" "contact.mm.phone": "Myanmar Phone"

BIN
assets/photos/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
assets/photos/2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
assets/photos/3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -60,7 +60,9 @@ class MainModel extends ChangeNotifier {
shippingAddress: '154-19 64th Ave.Flushing, \nNY 11367', shippingAddress: '154-19 64th Ave.Flushing, \nNY 11367',
deliveryAddress: '39 42th St. Kyaut Ta Thar Township Yangon'); deliveryAddress: '39 42th St. Kyaut Ta Thar Township Yangon');
Setting setting = Setting(terms: '[{"insert":"* Minimum shipping weight is 1lbs.\n* Oversized goods, Light weight/Large volume items, laptops, phones, tablets may incur extra charges based on pecifications.Please contact us for pricing.\n* Goods with lithium battary needs extra packaging and declaration. Please inform us ahead of time so that we can process your package accordingly.\n* Loose Batteries, Drones, and Prescription medicines are not allowed on aircraft.\n* Payment: We accept money orders, any US bank transfers via Zelle, AYA, KBZ and CB. No COD except for pick-ups.\n*Payments made in Myanmar will incur 2% tranfer fee\n"}]'); Setting setting = Setting(
terms:
'[{"insert":"* Minimum shipping weight is 1lbs.\n* Oversized goods, Light weight/Large volume items, laptops, phones, tablets may incur extra charges based on pecifications.Please contact us for pricing.\n* Goods with lithium battary needs extra packaging and declaration. Please inform us ahead of time so that we can process your package accordingly.\n* Loose Batteries, Drones, and Prescription medicines are not allowed on aircraft.\n* Payment: We accept money orders, any US bank transfers via Zelle, AYA, KBZ and CB. No COD except for pick-ups.\n*Payments made in Myanmar will incur 2% tranfer fee\n"}]');
PackageInfo packageInfo; PackageInfo packageInfo;
bool isLoaded = true; bool isLoaded = true;
bool isOnline = true; bool isOnline = true;
@@ -109,6 +111,14 @@ class MainModel extends ChangeNotifier {
return this.user != null; return this.user != null;
} }
bool isCustomer() {
return user != null && user.name != "Owner";
}
bool isOwner() {
return user != null && user.name == "Owner";
}
bool hasEmail() { bool hasEmail() {
return this.user != null && this.user.isEmail(); return this.user != null && this.user.isEmail();
} }

View File

@@ -8,19 +8,19 @@ class ShipmentModel extends BaseModel {
Shipment( Shipment(
shipDate: DateTime(2020, 4, 23), shipDate: DateTime(2020, 4, 23),
shipmentNumber: 'A103B', shipmentNumber: 'A103B',
status: 'Pending', status: 'In Progress',
arrivalDate: DateTime(2020, 4, 30), arrivalDate: DateTime(2020, 4, 30),
departureDate: DateTime(2020, 4, 23)), departureDate: DateTime(2020, 4, 23)),
Shipment( Shipment(
shipDate: DateTime(2020, 4, 2), shipDate: DateTime(2020, 4, 2),
shipmentNumber: 'A100A', shipmentNumber: 'A100A',
status: 'Delivered', status: 'Ready to ship',
arrivalDate: DateTime(2020, 4, 28), arrivalDate: DateTime(2020, 4, 28),
departureDate: DateTime(2020, 4, 15)), departureDate: DateTime(2020, 4, 15)),
Shipment( Shipment(
shipDate: DateTime(2020, 4, 2), shipDate: DateTime(2020, 4, 2),
shipmentNumber: 'A100B', shipmentNumber: 'A100B',
status: 'Delivered', status: 'Arrived',
arrivalDate: DateTime(2020, 4, 28), arrivalDate: DateTime(2020, 4, 28),
departureDate: DateTime(2020, 4, 15)), departureDate: DateTime(2020, 4, 15)),
Shipment( Shipment(
@@ -38,7 +38,7 @@ class ShipmentModel extends BaseModel {
Shipment( Shipment(
shipDate: DateTime(2020, 4, 10), shipDate: DateTime(2020, 4, 10),
shipmentNumber: 'A102B', shipmentNumber: 'A102B',
status: 'Assigned', status: 'Arrived',
arrivalDate: DateTime(2020, 4, 30), arrivalDate: DateTime(2020, 4, 30),
departureDate: DateTime(2020, 4, 20), departureDate: DateTime(2020, 4, 20),
) )
@@ -47,29 +47,31 @@ class ShipmentModel extends BaseModel {
List<Shipment> get canceled { List<Shipment> get canceled {
List<Shipment> _p = shipments.where((e) => e.status == "Canceled").toList() List<Shipment> _p = shipments.where((e) => e.status == "Canceled").toList()
..sort((e1, e2) { ..sort((e1, e2) {
return e2.shipDate.compareTo(e1.shipDate); return e1.shipDate.compareTo(e2.shipDate);
}); });
return _p; return _p;
} }
List<Shipment> get completed { List<Shipment> get completed {
return shipments.where((e) => e.status == "Delivered").toList() return shipments.where((e) => e.status == "Arrived").toList()
..sort((e1, e2) { ..sort((e1, e2) {
return e2.shipDate.compareTo(e1.shipDate); return e1.shipDate.compareTo(e2.shipDate);
}); });
} }
List<Shipment> get upcoming { List<Shipment> get upcoming {
return shipments List<Shipment> _shipments = shipments
.where((e) => .where((e) =>
e.status == "Pending" || e.status == "In Progress" ||
e.status == "Assigned" || e.status == "Ready to ship" ||
e.status == "Processed" || e.status == "Processed" ||
e.status == "Rescheduled") e.status == "Rescheduled")
.toList() .toList();
..sort((e1, e2) {
return e2.shipDate.compareTo(e1.shipDate); _shipments.sort((e1, e2) {
}); return e1.shipDate.compareTo(e2.shipDate);
});
return _shipments;
} }
void initUser(user) { void initUser(user) {

View File

@@ -14,51 +14,51 @@ class MessageModel extends BaseModel {
List<Message> messages = [ List<Message> messages = [
Message( Message(
senderName: "FCS System", senderName: "FCS System",
receiverName: "Online Buyer", receiverName: "Ko Myo Min",
date: DateTime(2020, 6, 1, 1, 1, 1), date: DateTime(2020, 6, 1, 1, 1, 1),
message: message:
"Hi Online Buyer, we received your goods. Please see the following link", "Hi Ko Myo Min, we received your goods. Please see the following link",
), ),
Message( Message(
senderName: "FCS System", senderName: "FCS System",
receiverName: "Online Buyer", receiverName: "Ko Myo Min",
date: DateTime(2020, 6, 1, 1, 1, 1), date: DateTime(2020, 6, 1, 1, 1, 1),
message: message:
"'A202-3 #1'", "'A202-3 #1'",
), ),
Message( Message(
senderName: "FCS System", senderName: "FCS System",
receiverName: "Online Buyer", receiverName: "Ko Myo Min",
date: DateTime(2020, 6, 1, 1, 5, 1), date: DateTime(2020, 6, 1, 1, 5, 1),
message: "Thank you. Will check the photos.", message: "Thank you. Will check the photos.",
isMe: false), isMe: false),
Message( Message(
senderName: "FCS System", senderName: "FCS System",
receiverName: "Online Buyer", receiverName: "Ko Myo Min",
date: DateTime(2020, 6, 1, 2, 1, 1), date: DateTime(2020, 6, 1, 2, 1, 1),
message: message:
"Hi Online Buyer, we successfully processed your goods and ready for payment. Please see in the following link.", "Hi Ko Myo Min, we successfully processed your goods and ready for payment. Please see in the following link.",
), ),
Message( Message(
senderName: "FCS System", senderName: "FCS System",
receiverName: "Online Buyer", receiverName: "Ko Myo Min",
date: DateTime(2020, 6, 1, 2, 1, 1), date: DateTime(2020, 6, 1, 2, 1, 1),
message: message:
"'INV202005010387'", "'INV202005010387'",
), ),
Message( Message(
senderName: "FCS System", senderName: "FCS System",
receiverName: "Online Buyer", receiverName: "Ko Myo Min",
date: DateTime(2020, 6, 1, 2, 10, 1), date: DateTime(2020, 6, 1, 2, 10, 1),
message: message:
"Hi Online Buyer, we have confirmed your payment and ready to ship your packages.", "Hi Ko Myo Min, we have confirmed your payment and ready to ship your packages.",
), ),
Message( Message(
senderName: "FCS System", senderName: "FCS System",
receiverName: "Shipper", receiverName: "Shipper",
date: DateTime(2020, 6, 1, 1, 1, 1), date: DateTime(2020, 6, 1, 1, 1, 1),
message: message:
"Hi Online Buyer, we received your goods. Please see in the following link.", "Hi Ko Myo Min, we received your goods. Please see in the following link.",
), ),
Message( Message(
senderName: "FCS System", senderName: "FCS System",
@@ -72,7 +72,7 @@ class MessageModel extends BaseModel {
receiverName: "Shipper", receiverName: "Shipper",
date: DateTime(2020, 6, 1, 2, 1, 1), date: DateTime(2020, 6, 1, 2, 1, 1),
message: message:
"Hi Online Buyer, we successfully processed your goods and ready for payment. Please see in the following link.", "Hi FCS Team, we successfully processed your goods and ready for payment. Please see in the following link.",
), ),
Message( Message(
senderName: "FCS System", senderName: "FCS System",
@@ -86,7 +86,14 @@ class MessageModel extends BaseModel {
receiverName: "Shipper", receiverName: "Shipper",
date: DateTime(2020, 6, 1, 2, 10, 1), date: DateTime(2020, 6, 1, 2, 10, 1),
message: message:
"Hi Online Buyer, we have confirmed your payment and ready to ship your packages.", "Hi FCS Team, we have confirmed your payment and ready to ship your packages.",
),
Message(
senderName: "Ko Myo Min",
receiverName: "FCS Team",
date: DateTime(2020, 6, 1, 2, 10, 1),
message:
"Hi Ko Myo Min, we have recevied your pickup request. We will arrange the pickup soon. Thank you.",
), ),
]; ];

View File

@@ -9,78 +9,103 @@ class PackageModel extends BaseModel {
final log = Logger('PackageModel'); final log = Logger('PackageModel');
StreamSubscription<QuerySnapshot> listener; StreamSubscription<QuerySnapshot> listener;
static List<Status> statusHistory = [
Status(status: "Received", date: DateTime(2020, 6, 1), done: true),
Status(status: "Processed", date: DateTime(2020, 6, 1), done: true),
Status(status: "Shipped", date: DateTime(2020, 6, 5), done: false),
Status(status: "Delivered", date: DateTime(2020, 6, 15), done: false)
];
List<Package> packages = [ List<Package> packages = [
Package(
shipmentNumber: "A202",
receiverNumber: "3",
boxNumber: "1",
rate: 7,
packageType: "General",
weight: 25,
status: "Received",
receiverAddress: '1 Bo Yar Nyunt St.\nDagon Tsp, Yangon',
arrivedDate: DateTime(2020, 6, 1),
),
Package( Package(
shipmentNumber: "A202", shipmentNumber: "A202",
receiverNumber: "3", receiverNumber: "3",
receiverName: "Ko Oo",
boxNumber: "1",
rate: 7,
packageType: "General",
weight: 25,
status: "Received",
receiverAddress: '1 Bo Yar Nyunt St.\nDagon Tsp, Yangon',
cargoDesc: "Clothes",
arrivedDate: DateTime(2020, 6, 1),
statusHistory: statusHistory),
Package(
shipmentNumber: "A202",
receiverNumber: "3",
receiverName: "Ko Oo",
boxNumber: "2", boxNumber: "2",
rate: 7, rate: 7,
packageType: "General", packageType: "General",
weight: 20, weight: 20,
status: "Received", status: "Received",
cargoDesc: "Clothes",
arrivedDate: DateTime(2020, 6, 1), arrivedDate: DateTime(2020, 6, 1),
statusHistory: statusHistory,
receiverAddress: '1 Bo Yar Nyunt St.\nDagon Tsp, Yangon'), receiverAddress: '1 Bo Yar Nyunt St.\nDagon Tsp, Yangon'),
Package( Package(
shipmentNumber: "A202", shipmentNumber: "A202",
receiverNumber: "3", receiverNumber: "3",
receiverName: "Ko Oo",
boxNumber: "3", boxNumber: "3",
rate: 7, rate: 7,
packageType: "General", packageType: "General",
weight: 15, weight: 15,
status: "Waiting for payment", cargoDesc: "Shoes",
status: "Processed",
arrivedDate: DateTime(2020, 6, 1), arrivedDate: DateTime(2020, 6, 1),
statusHistory: statusHistory,
receiverAddress: '1 Bo Yar Nyunt St.\nDagon Tsp, Yangon'), receiverAddress: '1 Bo Yar Nyunt St.\nDagon Tsp, Yangon'),
Package( Package(
shipmentNumber: "A202", shipmentNumber: "A202",
receiverNumber: "2", receiverNumber: "2",
receiverName: "Ma Aye",
boxNumber: "1", boxNumber: "1",
rate: 8, rate: 8,
packageType: "Medicine", packageType: "Medicine",
weight: 15, weight: 15,
status: "Processing", status: "Processed",
cargoDesc: "Dietary supplement",
arrivedDate: DateTime(2020, 6, 1), arrivedDate: DateTime(2020, 6, 1),
statusHistory: statusHistory,
receiverAddress: '2 Shwe Taung Kyar St, Bahan Tsp, Yangon'), receiverAddress: '2 Shwe Taung Kyar St, Bahan Tsp, Yangon'),
Package( Package(
shipmentNumber: "A202", shipmentNumber: "A202",
receiverNumber: "2", receiverNumber: "2",
receiverName: "Ma Aye",
boxNumber: "2", boxNumber: "2",
rate: 7, rate: 7,
packageType: "General", packageType: "General",
cargoDesc: "Handbags",
weight: 55, weight: 55,
status: "Ready to ship", status: "Ready to ship",
arrivedDate: DateTime(2020, 6, 1), arrivedDate: DateTime(2020, 6, 1),
statusHistory: statusHistory,
receiverAddress: '2 Shwe Taung Kyar St, Bahan Tsp, Yangon'), receiverAddress: '2 Shwe Taung Kyar St, Bahan Tsp, Yangon'),
Package( Package(
shipmentNumber: "A201", shipmentNumber: "A201",
receiverNumber: "1", receiverNumber: "1",
receiverName: "Ko Wai",
boxNumber: "1", boxNumber: "1",
rate: 9, rate: 9,
packageType: "Dangerous", packageType: "Dangerous",
cargoDesc: "Phones and Scooters",
weight: 25, weight: 25,
status: "Delivered", status: "Delivered",
arrivedDate: DateTime(2020, 5, 21), arrivedDate: DateTime(2020, 5, 21),
statusHistory: statusHistory,
receiverAddress: '3 Kambzwza St, Bahan Tsp, Yangon'), receiverAddress: '3 Kambzwza St, Bahan Tsp, Yangon'),
Package( Package(
shipmentNumber: "A201", shipmentNumber: "A201",
receiverNumber: "1", receiverNumber: "1",
receiverName: "Ko Wai",
boxNumber: "2", boxNumber: "2",
rate: 7, rate: 7,
packageType: "General", packageType: "General",
cargoDesc: "Construction tools",
weight: 5, weight: 5,
status: "Delivered", status: "Delivered",
arrivedDate: DateTime(2020, 5, 21), arrivedDate: DateTime(2020, 5, 21),
statusHistory: statusHistory,
receiverAddress: '3 Kambzwza St, Bahan Tsp, Yangon'), receiverAddress: '3 Kambzwza St, Bahan Tsp, Yangon'),
]; ];
@@ -94,7 +119,7 @@ class PackageModel extends BaseModel {
List<Package> get upcoming { List<Package> get upcoming {
return packages return packages
.where((e) => .where((e) =>
e.status == "Processing" || e.status == "Processed" ||
e.status == "Received" || e.status == "Received" ||
e.status == "Ready to ship") e.status == "Ready to ship")
.toList() .toList()

View File

@@ -83,7 +83,7 @@ class _CustomerListState extends State<CustomerList> {
padding: new EdgeInsets.symmetric( padding: new EdgeInsets.symmetric(
horizontal: 32.0 - dotSize / 2), horizontal: 32.0 - dotSize / 2),
child: Icon( child: Icon(
Feather.users, Feather.user,
color: primaryColor, color: primaryColor,
size: 40, size: 40,
), ),

View File

@@ -103,13 +103,16 @@ class _HomePageState extends State<HomePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
login = Provider.of<MainModel>(context).isLogin(); login = Provider.of<MainModel>(context).isLogin();
var owner = Provider.of<MainModel>(context).isOwner();
var customer = Provider.of<MainModel>(context).isCustomer();
final packagesBtn = _buildBtn2("package.name", final packagesBtn = _buildBtn2("package.name",
icon: Octicons.package, icon: Octicons.package,
btnCallback: () => btnCallback: () =>
Navigator.of(context).push(BottomUpPageRoute(PackageList()))); Navigator.of(context).push(BottomUpPageRoute(PackageList())));
final pickUpBtn = _buildBtn2("pickup", final pickUpBtn = _buildBtn2("pickup",
icon: MaterialCommunityIcons.directions, icon: SimpleLineIcons.direction,
btnCallback: () => btnCallback: () =>
Navigator.of(context).push(BottomUpPageRoute(PickUpList()))); Navigator.of(context).push(BottomUpPageRoute(PickUpList())));
@@ -118,7 +121,7 @@ class _HomePageState extends State<HomePage> {
btnCallback: () => btnCallback: () =>
Navigator.of(context).push(BottomUpPageRoute(ShipmentRates()))); Navigator.of(context).push(BottomUpPageRoute(ShipmentRates())));
final fcsProfileBtn = _buildBtn2("profile.title", final fcsProfileBtn = _buildBtn2("fcs.btn",
// imgIcon: Image.asset("assets/logo_btn.png", height: 25,color:Colors.white), // imgIcon: Image.asset("assets/logo_btn.png", height: 25,color:Colors.white),
icon: MaterialCommunityIcons.home_city, icon: MaterialCommunityIcons.home_city,
btnCallback: () => btnCallback: () =>
@@ -171,16 +174,16 @@ class _HomePageState extends State<HomePage> {
Navigator.of(context).push(BottomUpPageRoute(Term()))); Navigator.of(context).push(BottomUpPageRoute(Term())));
List<Widget> widgets = []; List<Widget> widgets = [];
widgets.add(buyingBtn); customer ? widgets.add(buyingBtn) : "";
widgets.add(pickUpBtn); customer || owner ? widgets.add(pickUpBtn) : "";
widgets.add(shipmentBtn); owner ? widgets.add(shipmentBtn) : "";
widgets.add(notiBtn); customer || owner ? widgets.add(notiBtn) : "";
widgets.add(staffBtn); owner ? widgets.add(staffBtn) : "";
widgets.add(fcsProfileBtn); owner ? widgets.add(fcsProfileBtn) : "";
widgets.add(shipmentCostBtn); widgets.add(shipmentCostBtn);
widgets.add(packagesBtn); customer || owner ? widgets.add(packagesBtn) : "";
widgets.add(customersBtn); owner ? widgets.add(customersBtn) : "";
widgets.add(invoicesBtn); customer || owner ? widgets.add(invoicesBtn) : "";
widgets.add(termBtn); widgets.add(termBtn);
return OfflineRedirect( return OfflineRedirect(

View File

@@ -10,6 +10,7 @@ import 'package:fcs/widget/multi_img_file.dart';
import 'package:fcs/widget/my_data_table.dart'; import 'package:fcs/widget/my_data_table.dart';
import 'package:fcs/widget/progress.dart'; import 'package:fcs/widget/progress.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -48,7 +49,7 @@ class _InvoiceEditorState extends State<InvoiceEditor> {
_dateController.text = dateFormatter.format(_invoice.invoiceDate); _dateController.text = dateFormatter.format(_invoice.invoiceDate);
_nameController.text = _invoice.customerName; _nameController.text = _invoice.customerName;
_phoneController.text = _invoice.customerPhoneNumber; _phoneController.text = _invoice.customerPhoneNumber;
_amountController.text = _invoice.amount.toString(); _amountController.text = _invoice.getAmount.toString();
_statusController.text = _invoice.status.toString(); _statusController.text = _invoice.status.toString();
_packages = _invoice.packages; _packages = _invoice.packages;
} else { } else {
@@ -123,8 +124,8 @@ class _InvoiceEditorState extends State<InvoiceEditor> {
enabledBorder: InputBorder.none, enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none, focusedBorder: InputBorder.none,
icon: Icon( icon: Icon(
Icons.pages, FontAwesomeIcons.fileInvoice,
color: Colors.grey, color: primaryColor,
), ),
)), )),
), ),
@@ -132,7 +133,7 @@ class _InvoiceEditorState extends State<InvoiceEditor> {
? Container( ? Container(
padding: EdgeInsets.only(top: 5), padding: EdgeInsets.only(top: 5),
child: TextFormField( child: TextFormField(
initialValue: "U Nyi", initialValue: "Ko Myo Min",
cursorColor: primaryColor, cursorColor: primaryColor,
decoration: InputDecoration( decoration: InputDecoration(
fillColor: Colors.white, fillColor: Colors.white,
@@ -144,8 +145,8 @@ class _InvoiceEditorState extends State<InvoiceEditor> {
borderSide: BorderSide( borderSide: BorderSide(
color: Colors.grey, width: 1.0)), color: Colors.grey, width: 1.0)),
icon: Icon( icon: Icon(
Icons.account_box, FontAwesomeIcons.fileInvoice,
color: Colors.grey, color: primaryColor,
), ),
suffixIcon: IconButton( suffixIcon: IconButton(
icon: Icon( icon: Icon(
@@ -167,34 +168,34 @@ class _InvoiceEditorState extends State<InvoiceEditor> {
fillColor: Colors.white, fillColor: Colors.white,
labelText: 'Customer Name', labelText: 'Customer Name',
labelStyle: labelStyle:
TextStyle(fontSize: 16, color: Colors.grey), TextStyle(fontSize: 16, color: primaryColor),
filled: true, filled: true,
enabledBorder: InputBorder.none, enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none, focusedBorder: InputBorder.none,
icon: Icon( icon: Icon(
Icons.account_box, Feather.user,
color: Colors.grey, color: primaryColor,
), ),
)), )),
), ),
widget.invoice == null // widget.invoice == null
? Container() // ? Container()
: TextFormField( // : TextFormField(
controller: _phoneController, // controller: _phoneController,
readOnly: true, // readOnly: true,
decoration: InputDecoration( // decoration: InputDecoration(
fillColor: Colors.white, // fillColor: Colors.white,
labelText: 'Customer Phone Number', // labelText: 'Customer Phone Number',
labelStyle: // labelStyle:
TextStyle(fontSize: 16, color: Colors.grey), // TextStyle(fontSize: 16, color: Colors.grey),
filled: true, // filled: true,
enabledBorder: InputBorder.none, // enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none, // focusedBorder: InputBorder.none,
icon: Icon( // icon: Icon(
Icons.phone, // Icons.phone,
color: Colors.grey, // color: Colors.grey,
), // ),
)), // )),
Container( Container(
padding: EdgeInsets.only(top: 0), padding: EdgeInsets.only(top: 0),
child: fcsInput('Amount', FontAwesomeIcons.moneyBill, child: fcsInput('Amount', FontAwesomeIcons.moneyBill,
@@ -215,12 +216,7 @@ class _InvoiceEditorState extends State<InvoiceEditor> {
fillColor: Colors.white, fillColor: Colors.white,
labelText: 'Status', labelText: 'Status',
filled: true, filled: true,
icon: Image.asset( icon: Icon(Icons.av_timer,color: primaryColor,),
'assets/status.png',
width: 24,
height: 24,
color: Colors.grey[700],
),
)), )),
), ),
SizedBox( SizedBox(

View File

@@ -90,7 +90,7 @@ class MessageDetail extends StatelessWidget {
message: e.message, message: e.message,
time: dateFormat.format(e.date), time: dateFormat.format(e.date),
delivered: true, delivered: true,
isMe: e.isMe != null ? e.isMe : true)) isMe: !(e.isMe != null ? e.isMe : true)))
.toList(); .toList();
return Scaffold( return Scaffold(

View File

@@ -45,11 +45,13 @@ class _PickUpEditorState extends State<PickUpEditor> {
PickUp _pickUp; PickUp _pickUp;
bool _isLoading = false; bool _isLoading = false;
var now = new DateTime.now(); var now = new DateTime.now();
bool isNew;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
if (widget.pickUp != null) { if (widget.pickUp != null) {
isNew = false;
_pickUp = widget.pickUp; _pickUp = widget.pickUp;
_addressEditingController.text = _pickUp.address; _addressEditingController.text = _pickUp.address;
_fromTimeEditingController.text = _pickUp.fromTime; _fromTimeEditingController.text = _pickUp.fromTime;
@@ -63,6 +65,8 @@ class _PickUpEditorState extends State<PickUpEditor> {
_recipientPhoneEditingController.text = mainModel.recipient.phoneNumber; _recipientPhoneEditingController.text = mainModel.recipient.phoneNumber;
_recipientAddressEditingController.text = _recipientAddressEditingController.text =
mainModel.recipient.shippingAddress; mainModel.recipient.shippingAddress;
} else {
isNew = true;
} }
} }
@@ -190,7 +194,7 @@ class _PickUpEditorState extends State<PickUpEditor> {
EdgeInsets.symmetric(vertical: 10.0, horizontal: 0.0), EdgeInsets.symmetric(vertical: 10.0, horizontal: 0.0),
icon: Icon( icon: Icon(
Icons.date_range, Icons.date_range,
color: Colors.grey, color: primaryColor,
)), )),
validator: (value) { validator: (value) {
if (value.isEmpty) { if (value.isEmpty) {
@@ -224,18 +228,20 @@ class _PickUpEditorState extends State<PickUpEditor> {
child: ListView(children: <Widget>[ child: ListView(children: <Widget>[
Center(child: nameWidget(mainModel.customer.name)), Center(child: nameWidget(mainModel.customer.name)),
Center(child: nameWidget(mainModel.customer.phoneNumber)), Center(child: nameWidget(mainModel.customer.phoneNumber)),
Center( isNew
child: Padding( ? Container()
padding: const EdgeInsets.only(left: 10.0, top: 8), : Center(
child: Text( child: Padding(
'#P200304', padding: const EdgeInsets.only(left: 10.0, top: 8),
style: TextStyle( child: Text(
color: Colors.black87, '#P200304',
fontSize: 14, style: TextStyle(
fontWeight: FontWeight.bold), color: Colors.black87,
), fontSize: 14,
), fontWeight: FontWeight.bold),
), ),
),
),
ExpansionTile( ExpansionTile(
title: Text('Pickup Location / Time'), title: Text('Pickup Location / Time'),
children: <Widget>[ children: <Widget>[

View File

@@ -58,7 +58,7 @@ class _PickupListRowState extends State<PickupListRow> {
Padding( Padding(
padding: EdgeInsets.all(5.0), padding: EdgeInsets.all(5.0),
child: Icon( child: Icon(
MaterialCommunityIcons.directions, SimpleLineIcons.direction,
color: primaryColor, color: primaryColor,
)), )),
new Expanded( new Expanded(

View File

@@ -254,27 +254,6 @@ class _ProfileState extends State<Profile> {
), ),
), ),
)); ));
Future<String> getVersionNumber() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String version = packageInfo.version + "+" + packageInfo.buildNumber;
return version;
}
final versionbox = Container(
padding: EdgeInsets.only(top: 15),
child: Container(
child: Center(
child: FutureBuilder(
future: getVersionNumber(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) =>
Text(
snapshot.hasData ? "v${snapshot.data}" : "Loading ...",
style: TextStyle(fontSize: 16.0, fontStyle: FontStyle.normal),
),
)),
));
return LocalProgress( return LocalProgress(
inAsyncCall: _isLoading, inAsyncCall: _isLoading,
child: Scaffold( child: Scaffold(

View File

@@ -266,7 +266,7 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
child: ListView(children: <Widget>[ child: ListView(children: <Widget>[
// _showCustomerData(mainModel.customer), // _showCustomerData(mainModel.customer),
widget.shipment == null widget.shipment == null
? fcsInput('Shipment Number', Icons.text_rotation_none, ? fcsInput('Shipment Number', Ionicons.ios_airplane,
controller: _shipmentNumberController) controller: _shipmentNumberController)
: Container( : Container(
child: TextFormField( child: TextFormField(
@@ -281,8 +281,8 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
enabledBorder: InputBorder.none, enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none, focusedBorder: InputBorder.none,
icon: Icon( icon: Icon(
Icons.text_rotation_none, Ionicons.ios_airplane,
color: Colors.grey, color: primaryColor,
), ),
)), )),
), ),
@@ -293,26 +293,6 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
controller: _cutoffDateController), controller: _cutoffDateController),
) )
: Container(), : Container(),
widget.shipment == null
? Container(
padding: EdgeInsets.only(top: 5),
child: DropdownButtonFormField(
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Shipment Type',
icon: Icon(Icons.pages)),
items: shipmentModel.shipmentType
.map((e) =>
DropdownMenuItem(child: Text(e), value: e))
.toList(),
onChanged: (selected) => {
setState(() {
_currentShipment = selected;
})
},
),
)
: Container(),
Container( Container(
padding: padding:
EdgeInsets.only(top: widget.shipment == null ? 5 : 0), EdgeInsets.only(top: widget.shipment == null ? 5 : 0),
@@ -324,6 +304,28 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
child: fcsInput('Departure Date', Icons.date_range, child: fcsInput('Departure Date', Icons.date_range,
controller: _departureDateControler), controller: _departureDateControler),
), ),
widget.shipment == null
? Container(
padding: EdgeInsets.only(top: 5),
child: DropdownButtonFormField(
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Shipment Type',
icon: Icon(Ionicons.ios_airplane,
color: primaryColor)),
items: shipmentModel.shipmentType
.map((e) =>
DropdownMenuItem(child: Text(e), value: e))
.toList(),
onChanged: (selected) => {
setState(() {
_currentShipment = selected;
})
},
),
)
: Container(),
widget.shipment == null widget.shipment == null
? Container( ? Container(
padding: EdgeInsets.only(top: 5), padding: EdgeInsets.only(top: 5),
@@ -355,21 +357,16 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
controller: _statusController, controller: _statusController,
cursorColor: primaryColor, cursorColor: primaryColor,
decoration: InputDecoration( decoration: InputDecoration(
fillColor: Colors.white, fillColor: Colors.white,
labelText: 'Status', labelText: 'Status',
filled: true, filled: true,
labelStyle: labelStyle: TextStyle(
TextStyle(fontSize: 16, color: Colors.grey), fontSize: 16, color: Colors.grey),
focusedBorder: UnderlineInputBorder( focusedBorder: UnderlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Colors.grey, width: 1.0)), color: Colors.grey, width: 1.0)),
icon: Image.asset( icon: Icon(Icons.av_timer,
'assets/status.png', color: primaryColor))),
width: 24,
height: 24,
color: Colors.grey[700],
),
)),
), ),
widget.shipment == null widget.shipment == null
? Container() ? Container()

View File

@@ -381,7 +381,7 @@ Widget nameWidget(String name) {
child: Text( child: Text(
name, name,
style: TextStyle( style: TextStyle(
color: Colors.black87, fontSize: 18, fontWeight: FontWeight.bold), color: Colors.black87, fontSize: 18, fontWeight: FontWeight.bold),
), ),
), ),
); );
@@ -417,7 +417,7 @@ Widget fcsInput(String label, IconData iconData,
filled: true, filled: true,
icon: Icon( icon: Icon(
iconData, iconData,
color: Colors.grey, color: primaryColor,
), ),
focusedBorder: UnderlineInputBorder( focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0)), borderSide: BorderSide(color: Colors.grey, width: 1.0)),

View File

@@ -1,12 +1,13 @@
import 'package:fcs/model/main_model.dart';
import 'package:fcs/model/pickup_model.dart';
import 'package:fcs/pages/util.dart'; import 'package:fcs/pages/util.dart';
import 'package:fcs/vo/package.dart'; import 'package:fcs/vo/package.dart';
import 'package:fcs/widget/localization/app_translations.dart'; import 'package:fcs/widget/localization/app_translations.dart';
import 'package:fcs/widget/progress.dart'; import 'package:fcs/widget/progress.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart'; import 'package:intl/intl.dart';
import 'package:timeline_list/timeline.dart';
import 'package:timeline_list/timeline_model.dart';
import '../theme/theme.dart'; import '../theme/theme.dart';
@@ -29,18 +30,26 @@ class _PackageEditorState extends State<PackageEditor> {
Package _package; Package _package;
bool _isLoading = false; bool _isLoading = false;
List<String> _images = [
"assets/photos/1.jpg",
"assets/photos/2.jpg",
"assets/photos/3.jpg"
];
bool isNew;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
if (widget.package != null) { if (widget.package != null) {
_package = widget.package; _package = widget.package;
isNew = false;
// _addressEditingController.text = _pickUp.address; // _addressEditingController.text = _pickUp.address;
// _fromTimeEditingController.text = _pickUp.fromTime; // _fromTimeEditingController.text = _pickUp.fromTime;
// _toTimeEditingController.text = _pickUp.toTime; // _toTimeEditingController.text = _pickUp.toTime;
// _noOfPackageEditingController.text = _pickUp.numberOfPackage.toString(); // _noOfPackageEditingController.text = _pickUp.numberOfPackage.toString();
// _weightEditingController.text = _pickUp.weight.toString(); // _weightEditingController.text = _pickUp.weight.toString();
} else { } else {
isNew = true;
_package = Package(rate: 0, weight: 0); _package = Package(rate: 0, weight: 0);
} }
} }
@@ -50,8 +59,48 @@ class _PackageEditorState extends State<PackageEditor> {
super.dispose(); super.dispose();
} }
final DateFormat dateFormat = DateFormat("d MMM yyyy");
List<TimelineModel> _models() {
return _package.statusHistory
.map((e) => TimelineModel(
Padding(
padding: const EdgeInsets.all(18.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(e.status,
style: TextStyle(
color: e.done ? primaryColor : Colors.grey,
fontSize: 16,
fontWeight: FontWeight.bold)),
e.status == "Processed"
? Text("(Waiting for payment)",
style: TextStyle(
color: e.done ? primaryColor : Colors.grey,
fontSize: 14,
fontWeight: FontWeight.bold))
: Container(),
Text(dateFormat.format(e.date)),
],
),
),
iconBackground: e.done ? primaryColor : Colors.grey,
icon: Icon(
e.status == "Shipped"
? Ionicons.ios_airplane
: e.status == "Delivered"
? MaterialCommunityIcons.truck_fast
: e.status == "Processed"
? MaterialIcons.check
: Octicons.package,
color: Colors.white,
)))
.toList();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var images = isNew ? [] : _images;
return LocalProgress( return LocalProgress(
inAsyncCall: _isLoading, inAsyncCall: _isLoading,
child: Scaffold( child: Scaffold(
@@ -67,26 +116,31 @@ class _PackageEditorState extends State<PackageEditor> {
body: Card( body: Card(
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
widget.package == null
? Center(
child: Container(
padding: EdgeInsets.all(8),
child: Text("New Package")))
: Center(child: nameWidget(_package.packageNumber)),
Expanded( Expanded(
child: ListView( child: ListView(
children: [ children: [
widget.package == null
? Center(
child: Container(
padding: EdgeInsets.all(8),
child: Text("New Package")))
: Center(child: nameWidget(_package.packageNumber)),
ExpansionTile( ExpansionTile(
title: Text('Package Information'), title: Text(
'Receiving',
style: TextStyle(
color: primaryColor, fontWeight: FontWeight.bold),
),
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(left: 20.0), padding: const EdgeInsets.only(left: 20.0, right: 20),
child: DropdownButtonFormField( child: DropdownButtonFormField(
value: _package.shipmentNumber, value: _package.shipmentNumber,
decoration: InputDecoration( decoration: InputDecoration(
fillColor: Colors.white, fillColor: Colors.white,
labelText: 'Shipment Number', labelText: 'Shipment Number',
icon: Icon(Icons.pages) icon: Icon(Ionicons.ios_airplane,
color: primaryColor)
// prefixIcon: Icon(Icons.play_arrow) // prefixIcon: Icon(Icons.play_arrow)
), ),
items: ["A102", "A103", "A201", "A202"] items: ["A102", "A103", "A201", "A202"]
@@ -97,92 +151,44 @@ class _PackageEditorState extends State<PackageEditor> {
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.only(left: 20.0), padding: const EdgeInsets.only(left: 20.0, right: 20),
child: TextFormField( child: TextFormField(
initialValue: "FCS383-283-1", initialValue: isNew ? "" : "FCS383-283-1",
decoration: InputDecoration( decoration: InputDecoration(
fillColor: Colors.white, fillColor: Colors.white,
labelText: 'FCS_ID', labelText: 'FCS_ID',
hintText: 'FCS_ID', hintText: 'FCS_ID',
filled: true, filled: true,
icon: Icon( icon: Icon(Feather.user, color: primaryColor),
Icons.account_box,
),
suffixIcon: IconButton( suffixIcon: IconButton(
icon: Icon(Icons.search), icon: Icon(Icons.search),
onPressed: () {})), onPressed: () {})),
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.only(left: 20.0), padding: const EdgeInsets.only(left: 20.0, right: 20),
child: DropdownButtonFormField( child: TextFormField(
value: _package.packageType, initialValue: _package.receiverName,
decoration: InputDecoration( decoration: InputDecoration(
fillColor: Colors.white, fillColor: Colors.white,
labelText: 'Cargo Type', labelText: 'Customer Name',
icon: Icon(Icons.pages) filled: true,
// prefixIcon: Icon(Icons.play_arrow) icon: Icon(Feather.user, color: Colors.white),
), suffixIcon: IconButton(
items: ["General", "Medicine", "Dangerous"] icon: Icon(Icons.search),
.map((e) => onPressed: () {})),
DropdownMenuItem(child: Text(e), value: e))
.toList(),
onChanged: (map) => {},
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.only(left: 20.0), padding: const EdgeInsets.only(left: 20.0, right: 20),
child: TextFormField( child: TextFormField(
initialValue: _package.weight.toString(), initialValue: isNew ? "" : "P0203",
textAlign: TextAlign.end,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Weight',
filled: true,
icon: Icon(
FontAwesomeIcons.weightHanging,
),
)),
),
Padding(
padding: const EdgeInsets.only(left: 20.0),
child: TextFormField(
initialValue: _package.rate.toString(),
textAlign: TextAlign.end,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Rate',
filled: true,
icon: Icon(
FontAwesomeIcons.tag,
),
)),
),
Padding(
padding: const EdgeInsets.only(left: 20.0),
child: TextFormField(
initialValue: _package.amount.toString(),
textAlign: TextAlign.end,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Amount',
filled: true,
icon: Icon(
FontAwesomeIcons.moneyBill,
),
)),
),
Padding(
padding: const EdgeInsets.only(left: 20.0),
child: TextFormField(
initialValue: "P0203",
decoration: InputDecoration( decoration: InputDecoration(
fillColor: Colors.white, fillColor: Colors.white,
labelText: 'Pickup ID', labelText: 'Pickup ID',
filled: true, filled: true,
icon: Icon( icon: Icon(MaterialCommunityIcons.directions,
Icons.account_box, color: primaryColor),
),
suffixIcon: IconButton( suffixIcon: IconButton(
icon: Icon(Icons.search), icon: Icon(Icons.search),
onPressed: () {})), onPressed: () {})),
@@ -191,35 +197,152 @@ class _PackageEditorState extends State<PackageEditor> {
], ],
), ),
ExpansionTile( ExpansionTile(
title: Text('Photos'), title: Text(
'Processing',
style: TextStyle(
color: primaryColor, fontWeight: FontWeight.bold),
),
children: [
Padding(
padding: const EdgeInsets.only(left: 20.0, right: 20),
child: DropdownButtonFormField(
value: _package.packageType,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Cargo Type',
icon: Icon(Entypo.box, color: primaryColor)),
items: ["General", "Medicine", "Dangerous"]
.map((e) =>
DropdownMenuItem(child: Text(e), value: e))
.toList(),
onChanged: (map) => {},
),
),
Padding(
padding: const EdgeInsets.only(left: 20.0, right: 20),
child: TextFormField(
initialValue:
isNew ? "" : _package.cargoDesc.toString(),
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Description',
filled: true,
icon: Icon(MaterialIcons.description,
color: primaryColor),
)),
),
Padding(
padding: const EdgeInsets.only(left: 20.0, right: 20),
child: TextFormField(
initialValue: _package.weight.toString(),
textAlign: TextAlign.end,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Weight',
filled: true,
icon: Icon(FontAwesomeIcons.weightHanging,
color: primaryColor),
)),
),
Padding(
padding: const EdgeInsets.only(left: 20.0, right: 20),
child: TextFormField(
initialValue: _package.rate.toString(),
textAlign: TextAlign.end,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Rate',
filled: true,
icon: Icon(FontAwesomeIcons.tag,
color: primaryColor),
)),
),
Padding(
padding: const EdgeInsets.only(left: 20.0, right: 20),
child: TextFormField(
initialValue: _package.amount.toString(),
textAlign: TextAlign.end,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Amount',
filled: true,
icon: Icon(FontAwesomeIcons.moneyBill,
color: primaryColor),
)),
),
],
),
ExpansionTile(
title: Text(
'Photos',
style: TextStyle(
color: primaryColor, fontWeight: FontWeight.bold),
),
children: <Widget>[ children: <Widget>[
Container( Container(
height: 130, height: 130,
width: 500, width: 500,
child: ListView( child: ListView.separated(
// scrollDirection: Axis.horizontal, separatorBuilder: (context, index) => Divider(
children: <Widget>[ color: Colors.black,
Padding( ),
padding: const EdgeInsets.only(left: 20.0), itemCount: images.length + 1,
child: DropdownButtonFormField( scrollDirection: Axis.horizontal,
value: _package.shipmentNumber, itemBuilder: (context, index) {
decoration: InputDecoration( if (index == images.length) {
fillColor: Colors.white, return Padding(
labelText: 'Shipment Number', padding: const EdgeInsets.all(8.0),
icon: Icon(Icons.pages) child: Container(
// prefixIcon: Icon(Icons.play_arrow) width: 200,
height: 70,
decoration: BoxDecoration(
border: Border.all(
color: primaryColor,
width: 2.0,
), ),
items: ["A102", "A103", "A201", "A202"] ),
.map((e) => DropdownMenuItem( child: Icon(SimpleLineIcons.plus),
child: Text(e), value: e)) ),
.toList(), );
onChanged: (map) => {}, } else {
), return Padding(
), padding: const EdgeInsets.all(8.0),
], child: Container(
width: 200,
height: 70,
decoration: BoxDecoration(
border: Border.all(
color: primaryColor,
width: 2.0,
),
),
child: Image.asset(images[index],
width: 50, height: 50),
),
);
}
},
), ),
), ),
], ],
),
ExpansionTile(
title: Text(
'Status',
style: TextStyle(
color: primaryColor, fontWeight: FontWeight.bold),
),
children: <Widget>[
Container(
height: 500,
padding: EdgeInsets.only(left: 20),
child: isNew
? Container()
: Timeline(
children: _models(),
position: TimelinePosition.Left),
),
],
) )
], ],
), ),
@@ -231,7 +354,7 @@ class _PackageEditorState extends State<PackageEditor> {
child: Container( child: Container(
width: 250, width: 250,
child: FlatButton( child: FlatButton(
child: Text('Create package'), child: Text('Complete receiving'),
color: primaryColor, color: primaryColor,
textColor: Colors.white, textColor: Colors.white,
onPressed: () { onPressed: () {
@@ -248,7 +371,7 @@ class _PackageEditorState extends State<PackageEditor> {
child: Container( child: Container(
width: 250, width: 250,
child: FlatButton( child: FlatButton(
child: Text('Save package'), child: Text('Complete processing'),
color: primaryColor, color: primaryColor,
textColor: Colors.white, textColor: Colors.white,
onPressed: () { onPressed: () {

View File

@@ -21,4 +21,6 @@ class Invoice {
this.status, this.status,
this.paymentAttachment, this.paymentAttachment,
this.packages}); this.packages});
double get getAmount => packages.fold(0, (p, e) => (e.rate * e.weight) + p);
} }

View File

@@ -1,3 +1,10 @@
class Status {
String status;
DateTime date;
bool done;
Status({this.status, this.date, this.done});
}
class Package { class Package {
String id; String id;
String shipmentNumber; String shipmentNumber;
@@ -9,6 +16,7 @@ class Package {
String receiverNumber; String receiverNumber;
String boxNumber; String boxNumber;
String status; String status;
String cargoDesc;
int rate; int rate;
int weight; int weight;
@@ -24,6 +32,8 @@ class Package {
shipmentNumber + "-" + receiverNumber + " #" + boxNumber; shipmentNumber + "-" + receiverNumber + " #" + boxNumber;
double get price => rate.toDouble() * weight; double get price => rate.toDouble() * weight;
List<Status> statusHistory;
Package( Package(
{this.id, {this.id,
this.shipmentNumber, this.shipmentNumber,
@@ -40,5 +50,7 @@ class Package {
this.pickUpID, this.pickUpID,
this.remark, this.remark,
this.status, this.status,
this.arrivedDate}); this.arrivedDate,
this.cargoDesc,
this.statusHistory});
} }

View File

@@ -693,6 +693,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.15" version: "0.2.15"
timeline_list:
dependency: "direct main"
description:
name: timeline_list
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.5"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:

View File

@@ -66,6 +66,9 @@ dependencies:
pin_input_text_field: pin_input_text_field:
flutter_icons: ^1.1.0 flutter_icons: ^1.1.0
country_icons: ^1.1.1 country_icons: ^1.1.1
timeline_list: ^0.0.5
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
@@ -76,6 +79,7 @@ flutter:
assets: assets:
- assets/ - assets/
- assets/local/ - assets/local/
- assets/photos/
fonts: fonts: