diff --git a/lib/model_fcs/package_model.dart b/lib/model_fcs/package_model.dart index 6568ebd..53e451d 100644 --- a/lib/model_fcs/package_model.dart +++ b/lib/model_fcs/package_model.dart @@ -14,6 +14,7 @@ class PackageModel extends BaseModel { 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: "Arrived", date: DateTime(2020, 6, 7), done: false), Status(status: "Delivered", date: DateTime(2020, 6, 15), done: false) ]; static List packages = [ @@ -88,7 +89,7 @@ class PackageModel extends BaseModel { weight: 55, market: "Macy", trackingID: "234-sdflsdf-213", - status: "Processed", + status: "Shipped", id: "PKG2043", arrivedDate: DateTime(2020, 6, 1), receiverAddress: '2 Shwe Taung Kyar St, Bahan Tsp, Yangon',statusHistory: statusHistory), @@ -101,7 +102,7 @@ class PackageModel extends BaseModel { packageType: "Dangerous", cargoDesc: "Phones and Scooters", weight: 25, - status: "Received", + status: "Arrived", market: "Amazon", trackingID: "sdf-asdf-23489", id: "PKG2044", @@ -131,6 +132,27 @@ class PackageModel extends BaseModel { }); } + List get shipped { + return packages.where((e) => e.status == "Shipped").toList() + ..sort((e1, e2) { + return e2.packageNumber.compareTo(e1.packageNumber); + }); + } + + List get arrived { + return packages.where((e) => e.status == "Arrived").toList() + ..sort((e1, e2) { + return e2.packageNumber.compareTo(e1.packageNumber); + }); + } + + List get delivered { + return packages.where((e) => e.status == "Delivered").toList() + ..sort((e1, e2) { + return e2.packageNumber.compareTo(e1.packageNumber); + }); + } + List get upcoming { return packages.where((e) => e.status == "Received").toList() ..sort((e1, e2) { diff --git a/lib/pages/barcode_screen_page.dart b/lib/pages/barcode_screen_page.dart index 0d6fc69..f1d4e5c 100644 --- a/lib/pages/barcode_screen_page.dart +++ b/lib/pages/barcode_screen_page.dart @@ -1,6 +1,7 @@ import 'package:barcode_scan/barcode_scan.dart'; import 'package:barcode_scan/model/scan_result.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_icons/flutter_icons.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; import 'package:fcs/model/product_model.dart'; @@ -26,49 +27,6 @@ class _BarcodeScreenPageState extends State { super.initState(); } - Widget showProducts(BuildContext context, ProductModel productModel) { - return Row( - mainAxisSize: MainAxisSize.max, - children: [ - Icon( - FontAwesomeIcons.tag, - color: primaryColor, - size: 20, - ), - SizedBox( - width: 20, - ), - new Flexible( - child: Container( - width: 170.0, - child: DropdownButton( - // value: currentProductID, - isExpanded: true, - hint: Text( - 'Select Product', - style: labelStyle, - ), - onChanged: changedProduct, - items: productModel.products - .map>((Product product) { - return new DropdownMenuItem( - value: product.id, - child: new Text(product.name, style: textStyle), - ); - }).toList(), - ), - ), - ), - ], - ); - } - - void changedProduct(selected) { - setState(() { - // currentProductID = selected; - }); - } - @override Widget build(BuildContext context) { return LocalProgress( @@ -82,9 +40,24 @@ class _BarcodeScreenPageState extends State { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - RaisedButton( - child: Icon(Icons.scanner), - onPressed: () async { + InkWell( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Scan : ", + style: TextStyle( + color: primaryColor, + fontWeight: FontWeight.bold, + fontSize: 20), + ), + Icon( + Ionicons.ios_qr_scanner, + size: 50, + ), + ], + ), + onTap: () async { await scan(); }, ) @@ -98,15 +71,4 @@ class _BarcodeScreenPageState extends State { print("ScanResult => $result"); setState(() => scanResult = result); } - - // _save() { - // if (currentProductID == null) return; - // this.buyerProduct.productID = currentProductID; - // var productName = - // Provider.of(context).getProductName(currentProductID); - // this.buyerProduct.productName = productName; - // this.buyerProduct.storageCapacityQty = int.parse(_storage.text); - // this.buyerProduct.dailySaleQty = int.parse(_sales.text); - // Navigator.pop(context, this.buyerProduct); - // } } diff --git a/lib/pages_fcs/package_editor.dart b/lib/pages_fcs/package_editor.dart index 539529d..a12d38c 100644 --- a/lib/pages_fcs/package_editor.dart +++ b/lib/pages_fcs/package_editor.dart @@ -1,7 +1,12 @@ import 'package:fcs/model/main_model.dart'; +import 'package:fcs/model/shipment_model.dart'; +import 'package:fcs/pages/barcode_screen_page.dart'; import 'package:fcs/pages/util.dart'; import 'package:fcs/vo/package.dart'; +import 'package:fcs/vo/shipping_address.dart'; +import 'package:fcs/widget/bottom_up_page_route.dart'; import 'package:fcs/widget/localization/app_translations.dart'; +import 'package:fcs/widget/my_data_table.dart'; import 'package:fcs/widget/progress.dart'; import 'package:flutter/material.dart'; import 'package:flutter_icons/flutter_icons.dart'; @@ -141,6 +146,50 @@ class _PackageEditorState extends State { fontWeight: FontWeight.bold), ), children: [ + Padding( + padding: const EdgeInsets.only( + left: 20.0, right: 20), + child: TextFormField( + initialValue: isNew ? "" : "zdf-sdfl-37sdfks", + decoration: InputDecoration( + fillColor: Colors.white, + labelText: 'Tracking ID', + hintText: 'Tracking ID', + filled: true, + suffixIcon: IconButton( + icon: Icon( + Ionicons.ios_barcode, + color: primaryColor, + ), + onPressed: () { + Navigator.push( + context, + BottomUpPageRoute( + BarcodeScreenPage()), + ); + }), + icon: Icon(Octicons.package, + color: primaryColor), + ), + ), + ), + Padding( + padding: const EdgeInsets.only( + left: 20.0, right: 20), + child: TextFormField( + initialValue: isNew ? "" : "FCS-0203-390-2", + decoration: InputDecoration( + fillColor: Colors.white, + labelText: 'FCS_ID', + hintText: 'FCS_ID', + filled: true, + icon: Icon(Feather.user, + color: primaryColor), + suffixIcon: IconButton( + icon: Icon(Icons.search), + onPressed: () {})), + ), + ), Padding( padding: const EdgeInsets.only( left: 20.0, right: 20), @@ -172,38 +221,6 @@ class _PackageEditorState extends State { ), ), ), - Padding( - padding: const EdgeInsets.only( - left: 20.0, right: 20), - child: TextFormField( - initialValue: isNew ? "" : "zdf-sdfl-37sdfks", - decoration: InputDecoration( - fillColor: Colors.white, - labelText: 'Tracking ID', - hintText: 'Tracking ID', - filled: true, - icon: Icon(Octicons.package, - color: primaryColor), - ), - ), - ), - Padding( - padding: const EdgeInsets.only( - left: 20.0, right: 20), - child: TextFormField( - initialValue: isNew ? "" : "FCS-0203-390-2", - decoration: InputDecoration( - fillColor: Colors.white, - labelText: 'FCS_ID', - hintText: 'FCS_ID', - filled: true, - icon: Icon(Feather.user, - color: primaryColor), - suffixIcon: IconButton( - icon: Icon(Icons.search), - onPressed: () {})), - ), - ), Padding( padding: const EdgeInsets.only( left: 20.0, right: 20), @@ -266,6 +283,15 @@ class _PackageEditorState extends State { color: primaryColor), )), ), + Padding( + padding: const EdgeInsets.only( + left: 20.0, right: 20), + child: fcsInput( + "Remark", + MaterialCommunityIcons.note, + ), + ), + SizedBox(height: 5), ], ) : Container(), @@ -346,7 +372,8 @@ class _PackageEditorState extends State { position: TimelinePosition.Left), ), ], - ) + ), + getShippingAddressList(context), ], ), ), @@ -392,4 +419,74 @@ class _PackageEditorState extends State { ), ); } + + Widget getShippingAddressList(BuildContext context) { + var shipmentModel = Provider.of(context); + return Container( + // padding: EdgeInsets.only(top: 5, left: 10), + child: ExpansionTile( + title: Text( + "Shipping Addresses", + style: TextStyle( + fontWeight: FontWeight.bold, + fontStyle: FontStyle.normal, + color: primaryColor), + ), + children: [ + Container( + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: MyDataTable( + headingRowHeight: 40, + columnSpacing: 50, + columns: [ + MyDataColumn( + label: Text( + "Full Name", + style: TextStyle( + fontSize: 15, + color: Colors.grey[600], + ), + )), + MyDataColumn( + label: Text( + "Phone Number", + style: TextStyle( + fontSize: 15, + color: Colors.grey[600], + ), + )), + ], + rows: getAddressRows(shipmentModel.shippingAddresses), + ), + ), + ), + ], + ), + ); + } + + List getAddressRows(List addresses) { + return addresses.map((s) { + return MyDataRow( + onSelectChanged: (selected) { + + }, + cells: [ + MyDataCell( + new Text( + s.fullName, + style: textStyle, + ), + ), + MyDataCell( + new Text( + s.phoneNumber, + style: textStyle, + ), + ), + ], + ); + }).toList(); + } } diff --git a/lib/pages_fcs/package_list.dart b/lib/pages_fcs/package_list.dart index 885bb03..b0bc1ea 100644 --- a/lib/pages_fcs/package_list.dart +++ b/lib/pages_fcs/package_list.dart @@ -9,12 +9,12 @@ import 'package:fcs/vo/buyer.dart'; import 'package:fcs/widget/bottom_up_page_route.dart'; import 'package:fcs/widget/localization/app_translations.dart'; import 'package:fcs/widget/progress.dart'; +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:flutter_icons/flutter_icons.dart'; import 'package:provider/provider.dart'; import '../theme/theme.dart'; -import 'pickup_editor.dart'; class PackageList extends StatefulWidget { @override @@ -40,7 +40,7 @@ class _PackageListState extends State { return LocalProgress( inAsyncCall: _isLoading, child: DefaultTabController( - length: 2, + length: 5, child: Scaffold( appBar: AppBar( centerTitle: true, @@ -51,19 +51,19 @@ class _PackageListState extends State { backgroundColor: primaryColor, title: Text(AppTranslations.of(context).text("package.title")), actions: [ - IconButton( - icon: Icon( - FontAwesomeIcons.barcode, - color: Colors.white, - ), - iconSize: 30, - onPressed: () { - Navigator.push( - context, - BottomUpPageRoute(BarcodeScreenPage()), - ); - }, - ), + // IconButton( + // icon: Icon( + // Ionicons.ios_barcode, + // color: Colors.white, + // ), + // iconSize: 30, + // onPressed: () { + // Navigator.push( + // context, + // BottomUpPageRoute(BarcodeScreenPage()), + // ); + // }, + // ), IconButton( icon: Icon( Icons.search, @@ -74,12 +74,20 @@ class _PackageListState extends State { ), ], bottom: TabBar( + dragStartBehavior: DragStartBehavior.start, unselectedLabelColor: Colors.grey, tabs: [ Tab( text: "Received", ), Tab(text: "Processed"), + Tab( + text: "Shipped", + ), + Tab(text: "Arrived"), + Tab( + text: "Delivered", + ), ], ), ), @@ -95,6 +103,9 @@ class _PackageListState extends State { children: [ _upComing(), _completed(), + _shipped(), + _arrived(), + _delivered(), ], )), ), @@ -155,4 +166,76 @@ class _PackageListState extends State { ], ); } + + Widget _shipped() { + var packageModel = Provider.of(context); + return Column( + children: [ + Expanded( + child: new ListView.separated( + separatorBuilder: (context, index) => Divider( + color: Colors.black, + ), + scrollDirection: Axis.vertical, + padding: EdgeInsets.only(top: 15), + shrinkWrap: true, + itemCount: packageModel.shipped.length, + itemBuilder: (BuildContext context, int index) { + return PackageListRow( + package: packageModel.shipped[index], + isReadOnly: false, + ); + }), + ), + ], + ); + } + + Widget _arrived() { + var packageModel = Provider.of(context); + return Column( + children: [ + Expanded( + child: new ListView.separated( + separatorBuilder: (context, index) => Divider( + color: Colors.black, + ), + scrollDirection: Axis.vertical, + padding: EdgeInsets.only(top: 15), + shrinkWrap: true, + itemCount: packageModel.arrived.length, + itemBuilder: (BuildContext context, int index) { + return PackageListRow( + package: packageModel.arrived[index], + isReadOnly: false, + ); + }), + ), + ], + ); + } + + Widget _delivered() { + var packageModel = Provider.of(context); + return Column( + children: [ + Expanded( + child: new ListView.separated( + separatorBuilder: (context, index) => Divider( + color: Colors.black, + ), + scrollDirection: Axis.vertical, + padding: EdgeInsets.only(top: 15), + shrinkWrap: true, + itemCount: packageModel.delivered.length, + itemBuilder: (BuildContext context, int index) { + return PackageListRow( + package: packageModel.delivered[index], + isReadOnly: false, + ); + }), + ), + ], + ); + } }