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/shipping_address_editor.dart'; import 'package:fcs/pages/util.dart'; import 'package:fcs/pages_fcs/shipping_address_row.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'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:timeline_list/timeline.dart'; import 'package:timeline_list/timeline_model.dart'; import '../theme/theme.dart'; import 'shipping_address_list.dart'; class PackageEditor extends StatefulWidget { final Package package; PackageEditor({this.package}); @override _PackageEditorState createState() => _PackageEditorState(); } class _PackageEditorState extends State { TextEditingController _addressEditingController = new TextEditingController(); TextEditingController _fromTimeEditingController = new TextEditingController(); TextEditingController _toTimeEditingController = new TextEditingController(); TextEditingController _noOfPackageEditingController = new TextEditingController(); TextEditingController _weightEditingController = new TextEditingController(); Package _package; bool _isLoading = false; List _images = [ "assets/photos/1.jpg", "assets/photos/2.jpg", "assets/photos/3.jpg" ]; bool isNew; ShippingAddress shippingAddress = ShippingAddress( fullName: 'U Nyi Nyi', addressLine1: '154-19 64th Ave.', addressLine2: 'Flushing', city: 'NY', state: 'NY', phoneNumber: '+1 (292)215-2247'); @override void initState() { super.initState(); if (widget.package != null) { _package = widget.package; isNew = false; // _addressEditingController.text = _pickUp.address; // _fromTimeEditingController.text = _pickUp.fromTime; // _toTimeEditingController.text = _pickUp.toTime; // _noOfPackageEditingController.text = _pickUp.numberOfPackage.toString(); // _weightEditingController.text = _pickUp.weight.toString(); } else { isNew = true; _package = Package(rate: 0, weight: 0); } } @override void dispose() { super.dispose(); } final DateFormat dateFormat = DateFormat("d MMM yyyy"); List _models() { print('_package.statusHistory=> ${_package.statusHistory}'); return _package.statusHistory .map((e) => TimelineModel( Padding( padding: const EdgeInsets.all(18.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ 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 Widget build(BuildContext context) { var owner = Provider.of(context).isOwner(); var images = isNew ? [] : _images; return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( appBar: AppBar( centerTitle: true, leading: new IconButton( icon: new Icon(Icons.close), onPressed: () => Navigator.of(context).pop(), ), backgroundColor: primaryColor, title: Text(AppTranslations.of(context).text("package.edit.title")), ), body: Card( child: Column( children: [ isNew ? Container() : Center(child: nameWidget(_package.market)), isNew ? Center( child: Container( padding: EdgeInsets.all(8), child: Text("New Package"))) : Center(child: nameWidget(_package.trackingID)), Expanded( child: ListView( children: [ owner ? ExpansionTile( title: Text( 'Receiving', style: TextStyle( color: primaryColor, 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), child: TextFormField( initialValue: _package.receiverName, decoration: InputDecoration( fillColor: Colors.white, labelText: 'Customer Name', filled: true, icon: Icon(Feather.user, color: Colors.white), suffixIcon: IconButton( icon: Icon(Icons.search), onPressed: () {})), ), ), // Padding( // padding: const EdgeInsets.only( // left: 20.0, right: 20), // child: TextFormField( // initialValue: isNew ? "" : "PKG2039", // decoration: InputDecoration( // fillColor: Colors.white, // labelText: 'Package ID', // hintText: 'Package ID', // filled: true, // icon: Icon(MaterialCommunityIcons.id_card, // color: primaryColor), // ), // ), // ), Padding( padding: const EdgeInsets.only( left: 20.0, right: 20), child: TextFormField( initialValue: isNew ? "" : "Amazon", decoration: InputDecoration( fillColor: Colors.white, labelText: 'Market', hintText: 'FCS_ID', filled: true, icon: Icon( MaterialCommunityIcons.cart_outline, color: primaryColor), ), ), ), // Padding( // padding: const EdgeInsets.only( // left: 20.0, right: 20), // child: TextFormField( // initialValue: isNew ? "" : "", // decoration: InputDecoration( // fillColor: Colors.white, // labelText: 'Pickup ID', // filled: true, // icon: Icon( // MaterialCommunityIcons.directions, // color: primaryColor), // suffixIcon: IconButton( // icon: Icon(Icons.search), // onPressed: () {})), // ), // ), ], ) : Container(), owner ? isNew ? Container() : ExpansionTile( title: Text( 'Processing', style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold), ), children: [ 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: fcsInput( "Remark", MaterialCommunityIcons.note, ), ), SizedBox(height: 5), ], ) : Container(), isNew ? Container() : ExpansionTile( title: Text( 'Photos', style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold), ), children: [ Container( height: 130, width: 500, child: ListView.separated( separatorBuilder: (context, index) => Divider( color: Colors.black, ), itemCount: images.length + 1, scrollDirection: Axis.horizontal, itemBuilder: (context, index) { if (index == images.length) { 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: Icon(SimpleLineIcons.plus), ), ); } 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), ), ); } }, ), ), ], ), isNew?Container(): getShippingAddressList(context), isNew ? Container() : ExpansionTile( title: Text( 'Status', style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold), ), children: [ Container( height: 500, padding: EdgeInsets.only(left: 20), child: isNew ? Container() : Timeline( children: _models(), position: TimelinePosition.Left), ), ], ), ], ), ), owner ? widget.package == null ? Align( alignment: Alignment.bottomCenter, child: Center( child: Container( width: 250, child: FlatButton( child: Text('Complete receiving'), color: primaryColor, textColor: Colors.white, onPressed: () { Navigator.pop(context); }, ), ))) : Container( child: Column( children: [ Align( alignment: Alignment.bottomCenter, child: Center( child: Container( width: 250, child: FlatButton( child: Text('Complete processing'), color: primaryColor, textColor: Colors.white, onPressed: () { Navigator.pop(context); }, ), ))), ], )) : Container() ], ), ), ), ); } Widget getShippingAddressList(BuildContext context) { var shipmentModel = Provider.of(context); return Container( child: ExpansionTile( title: Text( "Shipping Addresses", style: TextStyle( fontWeight: FontWeight.bold, fontStyle: FontStyle.normal, color: primaryColor), ), children: [ // Column( // children: getAddressList(context, shipmentModel.shippingAddresses), // ), Container( padding: EdgeInsets.only(left: 10, right: 10), child: Column( children: [ Row( children: [ Expanded( child: new Padding( padding: const EdgeInsets.symmetric(vertical: 10.0), child: Row( children: [ new Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( shippingAddress.fullName == null ? '' : shippingAddress.fullName, style: new TextStyle( fontSize: 15.0, color: Colors.black, fontWeight: FontWeight.bold), ), ), Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( shippingAddress.addressLine1 == null ? '' : shippingAddress.addressLine1, style: new TextStyle( fontSize: 14.0, color: Colors.grey), ), ), Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( shippingAddress.addressLine2 == null ? '' : shippingAddress.addressLine2, style: new TextStyle( fontSize: 14.0, color: Colors.grey), ), ), Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( shippingAddress.city == null ? '' : shippingAddress.city, style: new TextStyle( fontSize: 14.0, color: Colors.grey), ), ), Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( shippingAddress.state == null ? '' : shippingAddress.state, style: new TextStyle( fontSize: 14.0, color: Colors.grey), ), ), Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( shippingAddress.phoneNumber == null ? '' : "Phone:${shippingAddress.phoneNumber}", style: new TextStyle( fontSize: 14.0, color: Colors.grey), ), ), ], ), ], ), ), ), ], ), ], ), ), Container( padding: EdgeInsets.only(top: 20, bottom: 15, right: 15), child: Align( alignment: Alignment.bottomRight, child: Container( width: 130, height: 40, child: FloatingActionButton.extended( materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, onPressed: () async { var address = await Navigator.push( context, BottomUpPageRoute(ShippingAddressList()), ); print('address => ${address}'); setState(() { if (address != null) { this.shippingAddress = address; } }); }, icon: Icon(Icons.add), label: Text( 'Select \nAddress', style: TextStyle(fontSize: 12), ), backgroundColor: primaryColor, ), ), ), ) ], ), ); } List getAddressList( BuildContext context, List addresses) { return addresses.asMap().entries.map((s) { return InkWell( onTap: () { Navigator.push( context, BottomUpPageRoute(ShippingAddressEditor(shippingAddress: s.value)), ); }, child: ShippingAddressRow(shippingAddress: s.value, index: s.key), ); }).toList(); } 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(); } }