import 'package:fcs/model/main_model.dart'; import 'package:fcs/model/pickup_model.dart'; import 'package:fcs/pages/util.dart'; import 'package:fcs/vo/pickup.dart'; import 'package:fcs/widget/fcs_text_field.dart'; import 'package:fcs/widget/fcs_text_field_readonly.dart'; import 'package:flutter_datetime_picker/flutter_datetime_picker.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:fcs/widget/localization/app_translations.dart'; import 'package:flutter/material.dart'; import 'package:fcs/widget/progress.dart'; import '../theme/theme.dart'; class PickUpEditor extends StatefulWidget { final PickUp pickUp; PickUpEditor({this.pickUp}); @override _PickUpEditorState createState() => _PickUpEditorState(); } class _PickUpEditorState extends State { var dateFormatter = new DateFormat('dd MMM yyyy'); TextEditingController _addressEditingController = new TextEditingController(); TextEditingController _fromTimeEditingController = new TextEditingController(); TextEditingController _toTimeEditingController = new TextEditingController(); TextEditingController _noOfPackageEditingController = new TextEditingController(); TextEditingController _weightEditingController = new TextEditingController(); TextEditingController _recipientNameEditingController = new TextEditingController(); TextEditingController _recipientPhoneEditingController = new TextEditingController(); TextEditingController _recipientAddressEditingController = new TextEditingController(); TextEditingController _pickupDate = new TextEditingController(); PickUp _pickUp; bool _isLoading = false; var now = new DateTime.now(); @override void initState() { super.initState(); if (widget.pickUp != null) { _pickUp = widget.pickUp; _addressEditingController.text = _pickUp.address; _fromTimeEditingController.text = _pickUp.fromTime; _toTimeEditingController.text = _pickUp.toTime; _noOfPackageEditingController.text = _pickUp.numberOfPackage.toString(); _weightEditingController.text = _pickUp.weight.toString(); _pickupDate.text = dateFormatter.format(now); var mainModel = Provider.of(context, listen: false); _recipientNameEditingController.text = mainModel.recipient.name; _recipientPhoneEditingController.text = mainModel.recipient.phoneNumber; _recipientAddressEditingController.text = mainModel.recipient.shippingAddress; } } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { var pickupModel = Provider.of(context); final pickUpAddress = Container( child: TextFormField( maxLines: null, controller: _addressEditingController, cursorColor: primaryColor, style: textStyle, minLines: 2, decoration: new InputDecoration( labelText: 'Pickup Address', disabledBorder: InputBorder.none, enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor, width: 1.0)), focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor, width: 1.0)), ), )); final pickUpAddressReadOnly = Container( child: FCSTextFieldReadOnly( controller: _addressEditingController, label: 'Pickup Address', )); final pickupTime = Container( height: 50.0, child: Row(children: [ Container( width: 70.0, child: TextFormField( controller: _fromTimeEditingController, cursorColor: primaryColor, decoration: new InputDecoration( labelText: 'From', enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor, width: 1.0)), focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor, width: 1.0)), ), )), Padding( padding: const EdgeInsets.all(8.0), child: Text(' - '), ), Container( width: 70.0, child: TextFormField( controller: _toTimeEditingController, cursorColor: primaryColor, decoration: new InputDecoration( labelText: 'To', enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor, width: 1.0)), focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor, width: 1.0)), ), )), ]), ); final pickupTimeReadOnly = Container( height: 50.0, child: Row(children: [ Container( width: 70.0, child: FCSTextFieldReadOnly( controller: _fromTimeEditingController, label: 'From')), Padding( padding: const EdgeInsets.all(8.0), child: Text(' - '), ), Container( width: 70.0, child: FCSTextFieldReadOnly( controller: _toTimeEditingController, label: 'To')), ]), ); final noOfPackageBox = Container( height: 50.0, child: Row(children: [ Expanded( child: TextFormField( controller: _noOfPackageEditingController, cursorColor: primaryColor, textAlign: TextAlign.left, decoration: new InputDecoration( labelText: 'Number of Packages', enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor, width: 1.0)), focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor, width: 1.0)), ), )), ]), ); final noOfPackageBoxReadonly = Container( height: 50.0, child: Row(children: [ Expanded( child: FCSTextFieldReadOnly( controller: _noOfPackageEditingController, label: 'Number of Packages')), ]), ); final requestDateBox = Container( child: InkWell( onTap: () { DatePicker.showDatePicker( context, showTitleActions: true, currentTime: _pickupDate.text == "" ? null : dateFormatter.parse(_pickupDate.text), minTime: DateTime.now(), maxTime: DateTime(2030, 12, 31), onConfirm: (date) {}, locale: LocaleType.en, ); }, child: TextFormField( controller: _pickupDate, autofocus: false, cursorColor: primaryColor, style: textStyle, enabled: false, keyboardType: TextInputType.datetime, decoration: new InputDecoration( border: InputBorder.none, focusedBorder: InputBorder.none, labelText: AppTranslations.of(context).text("pickup.date"), // labelStyle: languageModel.isEng ? labelStyle : labelStyleMM, contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 0.0), icon: Icon( Icons.date_range, color: Colors.black87, )), validator: (value) { if (value.isEmpty) { return AppTranslations.of(context).text("do.form.date"); } return null; }, ), )); MainModel mainModel = Provider.of(context); 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("pickup.edit.title")), ), body: Card( child: Column( children: [ Expanded( child: Padding( padding: const EdgeInsets.all(10.0), child: ListView(children: [ Center(child: nameWidget(mainModel.customer.name)), Center(child: nameWidget(mainModel.customer.phoneNumber)), Center( child: Padding( padding: const EdgeInsets.only(left: 10.0, top: 8), child: Text( '#P200304', style: TextStyle( color: Colors.black87, fontSize: 14, fontWeight: FontWeight.bold), ), ), ), SizedBox(height: 15), ExpansionTile( title: Text('Pickup Location / Time'), children: [ Padding( padding: const EdgeInsets.only(left: 20.0), child: Row( children: [ Padding( padding: const EdgeInsets.only(right: 8.0), child: Icon(Icons.location_on), ), Expanded( child: widget.pickUp == null ? pickUpAddress : widget.pickUp.status == 'Pending' ? pickUpAddress : pickUpAddressReadOnly), ], ), ), SizedBox(height: 15), Padding( padding: const EdgeInsets.only(left: 20.0), child: Row( children: [ Padding( padding: const EdgeInsets.only(right: 8.0), child: Icon(Icons.timer), ), Padding( padding: const EdgeInsets.only(left: 8.0), child: Text('Pickup Time', style: TextStyle( color: Colors.grey, fontSize: 14)), ), ], ), ), Padding( padding: const EdgeInsets.only(left: 20.0), child: Row( children: [ SizedBox(height: 5), Padding( padding: const EdgeInsets.only(left: 33), child: widget.pickUp == null ? pickupTime : widget.pickUp.status == 'Pending' ? pickupTime : pickupTimeReadOnly, ), ], ), ), SizedBox(height: 5), Padding( padding: const EdgeInsets.only(left: 20.0), child: Column( children: [ SizedBox(height: 5), Container(height: 50.0, child: requestDateBox) ], ), ), SizedBox(height: 10), ], ), ExpansionTile( title: Text('Package Informations'), children: [ Padding( padding: const EdgeInsets.only(left: 20.0), child: Row( children: [ Padding( padding: const EdgeInsets.only(right: 8.0), child: Icon(Octicons.package), ), Expanded( child: widget.pickUp == null ? noOfPackageBox : widget.pickUp.status == 'Pending' ? noOfPackageBox : noOfPackageBoxReadonly), ], ), ), SizedBox( height: 15, ), Padding( padding: const EdgeInsets.only(left: 20.0), child: widget.pickUp == null ? fcsInput("Total Weight (lb)", FontAwesomeIcons.weightHanging, controller: _weightEditingController) : widget.pickUp.status == 'Pending' ? fcsInput("Total Weight (lb)", FontAwesomeIcons.weightHanging, controller: _weightEditingController) : fcsInputReadOnly("Total Weight (lb)", FontAwesomeIcons.weightHanging, controller: _weightEditingController), ), SizedBox(height: 15), Padding( padding: const EdgeInsets.only(left: 20.0), child: fcsInput("Remark", MaterialCommunityIcons.note), ), SizedBox(height: 25), ], ), ExpansionTile( title: Text('Recipient Informations'), children: [ Padding( padding: const EdgeInsets.only(left: 20.0), child: widget.pickUp == null ? fcsInput("Name", FontAwesomeIcons.user, controller: _recipientNameEditingController) : widget.pickUp.status == 'Pending' ? fcsInput("Name", FontAwesomeIcons.user, controller: _recipientNameEditingController) : fcsInputReadOnly( "Name", FontAwesomeIcons.user, controller: _recipientNameEditingController)), SizedBox(height: 25), Padding( padding: const EdgeInsets.only(left: 20.0), child: widget.pickUp == null ? fcsInput("Phone Number", FontAwesomeIcons.phone, controller: _recipientPhoneEditingController) : widget.pickUp.status == 'Pending' ? fcsInput( "Phone Number", FontAwesomeIcons.phone, controller: _recipientPhoneEditingController) : fcsInputReadOnly( "Phone Number", FontAwesomeIcons.phone, controller: _recipientPhoneEditingController)), SizedBox(height: 25), Padding( padding: const EdgeInsets.only(left: 20.0), child: widget.pickUp == null ? fcsInput("Address", Icons.location_on, controller: _recipientAddressEditingController) : widget.pickUp.status == 'Pending' ? fcsInput("Address", Icons.location_on, controller: _recipientAddressEditingController) : fcsInputReadOnly( "Address", Icons.location_on, controller: _recipientAddressEditingController)), SizedBox(height: 25), ], ), ExpansionTile( title: Text('For FCS'), children: [ widget.pickUp != null ? widget.pickUp.status == 'Pending' ? Padding( padding: const EdgeInsets.only(left: 20.0), child: fcsDropDown("Assigned", MaterialCommunityIcons.worker), ) : Container() : Container(), SizedBox( height: 25, ), ], ), ]), )), widget.pickUp == null ? Align( alignment: Alignment.bottomCenter, child: Center( child: Container( width: 250, child: FlatButton( child: Text('Request for pickup'), color: primaryColor, textColor: Colors.white, onPressed: () { Navigator.pop(context); }, ), ))) : Container( child: Column( children: [ widget.pickUp.status == 'Assigned' ? Align( alignment: Alignment.bottomCenter, child: Center( child: Container( width: 250, child: FlatButton( child: Text('Complete'), color: primaryColor, textColor: Colors.white, onPressed: () { Navigator.pop(context); }, ), ))) : Align( alignment: Alignment.bottomCenter, child: Center( child: Container( width: 250, child: FlatButton( child: Text('Update'), color: primaryColor, textColor: Colors.white, onPressed: () { Navigator.pop(context); }, ), ))), Align( alignment: Alignment.bottomCenter, child: Center( child: Container( width: 250, child: FlatButton( child: Text('Cancel Pickup'), color: Colors.grey[600], textColor: Colors.white, onPressed: () { Navigator.pop(context); }, ), ))) ], )) ], ), ), ), ); } }