diff --git a/lib/core/model/pending_orders/pending_orders_model.dart b/lib/core/model/pending_orders/pending_orders_req_model.dart similarity index 100% rename from lib/core/model/pending_orders/pending_orders_model.dart rename to lib/core/model/pending_orders/pending_orders_req_model.dart diff --git a/lib/core/model/pending_orders/pending_orders_res_model.dart b/lib/core/model/pending_orders/pending_orders_res_model.dart new file mode 100644 index 0000000..a5c8420 --- /dev/null +++ b/lib/core/model/pending_orders/pending_orders_res_model.dart @@ -0,0 +1,153 @@ +class PendingOrdersRes { + int rowID; + int orderID; + String firstName; + String middleName; + String lastName; + int gender; + String nationalityID; + String mobileNumber; + String preferredLanguage; + int driverID; + int statusID; + bool ispaused; + int groupID; + String description; + String descriptionN; + double longitude; + double latitude; + Null amount; + String orderCreatedOn; + Null ePharmacyOrderNo; + int projectID; + String appointmentNo; + String dischargeID; + String patientID; + bool patientOutSA; + int distanceInKilometers; + List itemsQuantitiesList; + + PendingOrdersRes( + {this.rowID, + this.orderID, + this.firstName, + this.middleName, + this.lastName, + this.gender, + this.nationalityID, + this.mobileNumber, + this.preferredLanguage, + this.driverID, + this.statusID, + this.ispaused, + this.groupID, + this.description, + this.descriptionN, + this.longitude, + this.latitude, + this.amount, + this.orderCreatedOn, + this.ePharmacyOrderNo, + this.projectID, + this.appointmentNo, + this.dischargeID, + this.patientID, + this.patientOutSA, + this.distanceInKilometers, + this.itemsQuantitiesList}); + + PendingOrdersRes.fromJson(Map json) { + rowID = json['RowID']; + orderID = json['OrderID']; + firstName = json['FirstName']; + middleName = json['MiddleName']; + lastName = json['LastName']; + gender = json['Gender']; + nationalityID = json['NationalityID']; + mobileNumber = json['MobileNumber']; + preferredLanguage = json['PreferredLanguage']; + driverID = json['DriverID']; + statusID = json['StatusID']; + ispaused = json['Ispaused']; + groupID = json['GroupID']; + description = json['Description']; + descriptionN = json['DescriptionN']; + longitude = json['Longitude']; + latitude = json['Latitude']; + amount = json['Amount']; + orderCreatedOn = json['OrderCreatedOn']; + ePharmacyOrderNo = json['ePharmacyOrderNo']; + projectID = json['ProjectID']; + appointmentNo = json['AppointmentNo']; + dischargeID = json['DischargeID']; + patientID = json['PatientID']; + patientOutSA = json['PatientOutSA']; + distanceInKilometers = json['DistanceInKilometers']; + if (json['ItemsQuantitiesList'] != null) { + itemsQuantitiesList = new List(); + json['ItemsQuantitiesList'].forEach((v) { + itemsQuantitiesList.add(new ItemsQuantitiesList.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['RowID'] = this.rowID; + data['OrderID'] = this.orderID; + data['FirstName'] = this.firstName; + data['MiddleName'] = this.middleName; + data['LastName'] = this.lastName; + data['Gender'] = this.gender; + data['NationalityID'] = this.nationalityID; + data['MobileNumber'] = this.mobileNumber; + data['PreferredLanguage'] = this.preferredLanguage; + data['DriverID'] = this.driverID; + data['StatusID'] = this.statusID; + data['Ispaused'] = this.ispaused; + data['GroupID'] = this.groupID; + data['Description'] = this.description; + data['DescriptionN'] = this.descriptionN; + data['Longitude'] = this.longitude; + data['Latitude'] = this.latitude; + data['Amount'] = this.amount; + data['OrderCreatedOn'] = this.orderCreatedOn; + data['ePharmacyOrderNo'] = this.ePharmacyOrderNo; + data['ProjectID'] = this.projectID; + data['AppointmentNo'] = this.appointmentNo; + data['DischargeID'] = this.dischargeID; + data['PatientID'] = this.patientID; + data['PatientOutSA'] = this.patientOutSA; + data['DistanceInKilometers'] = this.distanceInKilometers; + if (this.itemsQuantitiesList != null) { + data['ItemsQuantitiesList'] = + this.itemsQuantitiesList.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class ItemsQuantitiesList { + String itemName; + int productID; + int quantity; + + ItemsQuantitiesList({this.itemName, this.productID, this.quantity}); + + ItemsQuantitiesList.fromJson(Map json) { + itemName = json['ItemName']; + productID = json['ProductID']; + quantity = json['Quantity']; + } + + Map toJson() { + final Map data = new Map(); + + data['ItemName'] = this.itemName; + data['ProductID'] = this.productID; + + data['Quantity'] = this.quantity; + + return data; + } +} diff --git a/lib/core/service/orders_service.dart b/lib/core/service/orders_service.dart index 5a8f9b3..fbc4184 100644 --- a/lib/core/service/orders_service.dart +++ b/lib/core/service/orders_service.dart @@ -1,12 +1,12 @@ import 'package:driverapp/config/config.dart'; -import 'package:driverapp/core/model/pending_orders/pending_orders_model.dart'; +import 'package:driverapp/core/model/pending_orders/pending_orders_req_model.dart'; +import 'package:driverapp/core/model/pending_orders/pending_orders_res_model.dart'; import 'package:driverapp/core/model/scan_qr/scan_qr_request_model.dart'; import 'package:driverapp/core/service/base_service.dart'; class OrdersService extends BaseService { - List _orders = List(); - - List get orders => _orders; + List _orders = List(); + List get orders => _orders; bool isOrderInserted; PendingOrders _requestGetPendingOrders = PendingOrders( @@ -26,7 +26,7 @@ class OrdersService extends BaseService { onSuccess: (dynamic response, int statusCode) { _orders.clear(); response['PatientER_Delivery_GetAllOrderList'].forEach((order) { - _orders.add(PendingOrders.fromJson(order)); + _orders.add(PendingOrdersRes.fromJson(order)); }); }, onFailure: (String error, int statusCode) { hasError = true; @@ -35,6 +35,7 @@ class OrdersService extends BaseService { } catch (e) { hasError = true; super.error = error; + throw e; } } diff --git a/lib/core/viewModels/orders_view_model.dart b/lib/core/viewModels/orders_view_model.dart index 6c2c0fb..6e3e6d1 100644 --- a/lib/core/viewModels/orders_view_model.dart +++ b/lib/core/viewModels/orders_view_model.dart @@ -1,14 +1,14 @@ import 'package:driverapp/core/enum/viewstate.dart'; -import 'package:driverapp/core/model/pending_orders/pending_orders_model.dart'; +import 'package:driverapp/core/model/pending_orders/pending_orders_res_model.dart'; import 'package:driverapp/core/service/orders_service.dart'; - +import 'package:driverapp/core/model/pending_orders/pending_orders_req_model.dart'; import '../../locator.dart'; import 'base_view_model.dart'; class OrdersViewModel extends BaseViewModel { OrdersService _pendingOrdersService = locator(); - List get orders => _pendingOrdersService.orders; + List get orders => _pendingOrdersService.orders; Future getPendingOrders() async { setState(ViewState.Busy); @@ -20,7 +20,6 @@ class OrdersViewModel extends BaseViewModel { setState(ViewState.Idle); } - Future insertOrder() async { setState(ViewState.ErrorLocal); await _pendingOrdersService.insertOrder(); diff --git a/lib/pages/dashboard/dashboard_screen.dart b/lib/pages/dashboard/dashboard_screen.dart index a026628..0909123 100644 --- a/lib/pages/dashboard/dashboard_screen.dart +++ b/lib/pages/dashboard/dashboard_screen.dart @@ -23,8 +23,7 @@ class _DashboardScreenState extends State { int orderId; return BaseView( onModelReady: (model) => model.getPendingOrders(), - builder: - (BuildContext context, OrdersViewModel model, Widget child) => + builder: (BuildContext context, OrdersViewModel model, Widget child) => AppScaffold( body: Column( // mainAxisAlignment: MainAxisAlignment.center, @@ -92,14 +91,8 @@ class _DashboardScreenState extends State { Padding( padding: EdgeInsets.symmetric(horizontal: 10.0), child: Container( - height: MediaQuery - .of(context) - .size - .height * 0.15, - width: MediaQuery - .of(context) - .size - .width * 0.44, + height: MediaQuery.of(context).size.height * 0.15, + width: MediaQuery.of(context).size.width * 0.44, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), gradient: LinearGradient( @@ -112,7 +105,7 @@ class _DashboardScreenState extends State { padding: EdgeInsets.all(10.0), child: Column( mainAxisAlignment: - MainAxisAlignment.spaceBetween, + MainAxisAlignment.spaceBetween, children: [ Text( 'You Have', @@ -145,15 +138,13 @@ class _DashboardScreenState extends State { padding: EdgeInsets.only(right: 9.5), child: Image.asset( 'assets/images/closed_box.png', - height: MediaQuery - .of(context) - .size - .height * + height: MediaQuery.of(context) + .size + .height * 0.09, - width: MediaQuery - .of(context) - .size - .width * + width: MediaQuery.of(context) + .size + .width * 0.20, //fit: BoxFit.cover, )), @@ -174,10 +165,7 @@ class _DashboardScreenState extends State { padding: EdgeInsets.symmetric(horizontal: 10.0), child: Container( height: MediaQuery.of(context).size.height * 0.15, - width: MediaQuery - .of(context) - .size - .width * 0.44, + width: MediaQuery.of(context).size.width * 0.44, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), gradient: LinearGradient( @@ -191,7 +179,7 @@ class _DashboardScreenState extends State { padding: EdgeInsets.all(12.0), child: Column( mainAxisAlignment: - MainAxisAlignment.spaceEvenly, + MainAxisAlignment.spaceEvenly, children: [ Text( 'You Have', @@ -247,14 +235,8 @@ class _DashboardScreenState extends State { Expanded( child: InkWell( child: Container( - height: MediaQuery - .of(context) - .size - .height * 0.16, - width: MediaQuery - .of(context) - .size - .width * 0.50, + height: MediaQuery.of(context).size.height * 0.16, + width: MediaQuery.of(context).size.width * 0.50, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), gradient: LinearGradient(colors: [ @@ -270,15 +252,9 @@ class _DashboardScreenState extends State { Image.asset( 'assets/images/qr_code.png', width: - MediaQuery - .of(context) - .size - .width * 0.25, + MediaQuery.of(context).size.width * 0.25, height: - MediaQuery - .of(context) - .size - .height * 0.14, + MediaQuery.of(context).size.height * 0.14, fit: BoxFit.cover, ) ], @@ -352,10 +328,10 @@ class _DashboardScreenState extends State { ], ), onTap: () => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => OrdersListScreen()), - )), + context, + MaterialPageRoute( + builder: (context) => OrdersListScreen()), + )), ], ), ], @@ -366,16 +342,13 @@ class _DashboardScreenState extends State { shrinkWrap: true, scrollDirection: Axis.vertical, itemCount: //model.orders == null ? 0 : model.orders.length, - 3, + 3, itemBuilder: (BuildContext context, int index) { return Padding( padding: EdgeInsets.symmetric(horizontal: 12.2), child: InkWell( child: RoundedContainer( - height: MediaQuery - .of(context) - .size - .height * 0.108, + height: MediaQuery.of(context).size.height * 0.108, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -388,15 +361,10 @@ class _DashboardScreenState extends State { padding: EdgeInsets.only(left: 22.0), child: Image.asset( 'assets/images/location.png', - height: MediaQuery - .of(context) - .size - .height * - 0.10, - width: MediaQuery - .of(context) - .size - .width * + height: + MediaQuery.of(context).size.height * + 0.10, + width: MediaQuery.of(context).size.width * 0.09, ), ) @@ -407,25 +375,28 @@ class _DashboardScreenState extends State { Expanded( flex: 3, child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - model.orders[index].firstName + - ' ' + - model.orders[index].lastName, - style: TextStyle(fontSize: 18.0), + Padding( + padding: EdgeInsets.only(top: 5.0), + child: Text( + model.orders[index].firstName + + ' ' + + model.orders[index].lastName, + style: TextStyle(fontSize: 18.0), + ), ), Text( model.orders[index].mobileNumber, style: TextStyle( - color: Color(0xff30B7B9), - fontWeight: FontWeight.w600, - fontSize: 15.0), + color: Color(0xff30B7B9), + fontWeight: FontWeight.w600, + fontSize: 15.0, + ), ), Expanded( child: Text( - 'Olaya ST, Behind kfc next to king ,Olaya ST ', + 'Olaya ST, Behind kfc next to king ,', style: TextStyle(color: Colors.black45), ), ), @@ -496,5 +467,4 @@ class _DashboardScreenState extends State { AppToast.showSuccessToast(message: "Order Added"); } } - } diff --git a/lib/pages/delivery/delivery_confirmed_page.dart b/lib/pages/delivery/delivery_confirmed_page.dart index 32922ab..1d219e8 100644 --- a/lib/pages/delivery/delivery_confirmed_page.dart +++ b/lib/pages/delivery/delivery_confirmed_page.dart @@ -41,11 +41,10 @@ class DeliveryConfirmedPage extends StatelessWidget { Container( width: 300, height: 300, - padding: EdgeInsets.only(top:60), + padding: EdgeInsets.only(top: 60), decoration: BoxDecoration( color: Colors.white10, - shape: BoxShape.circle - ), + shape: BoxShape.circle), child: Column( children: [ Icon( @@ -79,7 +78,6 @@ class DeliveryConfirmedPage extends StatelessWidget { ), ], ), - Stack( children: [ Container( @@ -108,7 +106,8 @@ class DeliveryConfirmedPage extends StatelessWidget { padding: EdgeInsets.all(8), color: Colors.orangeAccent, shape: RoundedRectangleBorder( - borderRadius: new BorderRadius.circular(10.0), + borderRadius: + new BorderRadius.circular(10.0), ), icon: Icon( Icons.mode_edit, @@ -122,13 +121,18 @@ class DeliveryConfirmedPage extends StatelessWidget { ), onPressed: () {}, ), - SizedBox(height: 20,), + SizedBox( + height: 20, + ), FlatButton( color: Color(0xff41bdbb), - padding: EdgeInsets.only(right: 100, left: 100), + padding: + EdgeInsets.only(right: 100, left: 100), shape: RoundedRectangleBorder( - borderRadius: new BorderRadius.circular(18.0), - side: BorderSide(color: Color(0xff41bdbb)), + borderRadius: + new BorderRadius.circular(18.0), + side: + BorderSide(color: Color(0xff41bdbb)), ), child: Text( TranslationBase @@ -148,8 +152,7 @@ class DeliveryConfirmedPage extends StatelessWidget { itemId: item.driverID, customerFirstName: item.firstName, customerLastName: item.lastName, - mobileNo: item.mobileNumber - ), + mobileNo: item.mobileNumber), ], ), ], @@ -161,4 +164,3 @@ class DeliveryConfirmedPage extends StatelessWidget { ); } } - diff --git a/lib/pages/orders/pending_orders_page.dart b/lib/pages/orders/pending_orders_page.dart index 16149b2..d309f8e 100644 --- a/lib/pages/orders/pending_orders_page.dart +++ b/lib/pages/orders/pending_orders_page.dart @@ -1,9 +1,9 @@ -import 'package:driverapp/core/viewModels/orders_view_model.dart'; -import 'package:driverapp/widgets/others/rounded_container.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - +import 'package:driverapp/config/size_config.dart'; +import 'package:driverapp/core/viewModels/orders_view_model.dart'; import '../base/base_view.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:driverapp/widgets/others/rounded_container.dart'; class OrdersListScreen extends StatefulWidget { @override @@ -15,142 +15,127 @@ class _OrdersListScreenState extends State { Widget build(BuildContext context) { return BaseView( onModelReady: (model) => model.getPendingOrders(), - builder: - (BuildContext context, OrdersViewModel model, Widget child) => + builder: (BuildContext context, OrdersViewModel model, Widget child) => Scaffold( - appBar: AppBar( - centerTitle: true, - backgroundColor: Color(0xffF4F9FA), - title: Text( - 'Your Delivery Que', + appBar: AppBar( + centerTitle: true, + backgroundColor: Color(0xffF4F9FA), + title: Text( + 'Your Delivery Que', + ), + ), + body: Column( + children: [ + Center( + child: Text( + 'Nearest', + style: TextStyle( + color: Color(0xff30B7B9), + fontSize: 18.0, + fontWeight: FontWeight.w400), ), ), - body: Column( - children: [ - Center( - child: Text( - 'Nearest', - style: TextStyle( - color: Color(0xff30B7B9), - fontSize: 18.0, - fontWeight: FontWeight.w400), - ), - ), - Expanded( - child: ListView.builder( - itemCount: model.orders == null ? 0 : model.orders.length, - scrollDirection: Axis.vertical, - shrinkWrap: true, - itemBuilder: (BuildContext context, int index) { - return Padding( - padding: EdgeInsets.symmetric(horizontal: 12.2), - child: RoundedContainer( - height: MediaQuery - .of(context) - .orientation == + Expanded( + child: ListView.builder( + itemCount: model.orders == null ? 0 : model.orders.length, + scrollDirection: Axis.vertical, + shrinkWrap: true, + itemBuilder: (BuildContext context, int index) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 12.2), + child: RoundedContainer( + height: MediaQuery.of(context).orientation == Orientation.portrait - ? MediaQuery - .of(context) - .size - .height * 0.107 - : MediaQuery - .of(context) - .size - .height * 0.18, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 1, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(left: 22.0), - child: Image.asset( - 'assets/images/location.png', - height: - MediaQuery - .of(context) - .size - .height * + ? MediaQuery.of(context).size.height * 0.107 + : MediaQuery.of(context).size.height * 0.18, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + flex: 1, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(left: 22.0), + child: Image.asset( + 'assets/images/location.png', + height: + MediaQuery.of(context).size.height * 0.101, - ), - ), - ], + ), ), + ], + ), + ), + if (model.orders.length != 0) + Expanded( + flex: 3, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(top: 10.0), + child: Text( + model.orders[index].firstName + + ' ' + + model.orders[index].lastName, + style: TextStyle(fontSize: 18.0), + ), + ), + Text( + model.orders[index].mobileNumber, + style: TextStyle( + color: Color(0xff30B7B9), + fontWeight: FontWeight.w600, + fontSize: 15.0), + ), + Expanded( + child: Text( + 'Olaya ST, Behind kfc next to king ', + style: TextStyle(color: Colors.black45), + ), + ) + ], ), - if (model.orders.length != 0) + ), + Padding( + padding: EdgeInsets.all(10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ Expanded( - flex: 3, - child: Column( - crossAxisAlignment: CrossAxisAlignment - .start, - children: [ - Expanded( + child: CircleAvatar( + backgroundColor: Colors.black45, + radius: 28.0, + child: CircleAvatar( + backgroundColor: Colors.white, + maxRadius: 25.1, + child: Padding( + padding: const EdgeInsets.all(8.0), child: Text( - model.orders[index].firstName + - ' ' + - model.orders[index].lastName, - style: TextStyle(fontSize: 18.0), - ), - ), - Text( - model.orders[index].mobileNumber, - style: TextStyle( - color: Color(0xff30B7B9), - fontWeight: FontWeight.w600, - fontSize: 15.0), - ), - Expanded( - child: Text( - 'Olaya ST, Behind kfc next to king ', + '3 K.m \n away', style: TextStyle( - color: Colors.black45), - ), - ) - ], - ), - ), - Padding( - padding: EdgeInsets.all(10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Expanded( - child: CircleAvatar( - backgroundColor: Colors.black45, - radius: 28.0, - child: CircleAvatar( - backgroundColor: Colors.white, - maxRadius: 25.1, - child: Padding( - padding: const EdgeInsets.all( - 8.0), - child: Text( - '3 K.m \n away', - style: TextStyle( - color: Color(0xff30B7B9), - fontSize: 12.5, - fontWeight: FontWeight - .w600), - ), - ), + color: Color(0xff30B7B9), + fontSize: 12.5, + fontWeight: FontWeight.w600), ), ), - ) - ], - ), - ), - ], + ), + ), + ) + ], + ), ), - ), - ); - }), - ), - ], + ], + ), + ), + ); + }), ), - ), + ], + ), + ), ); } }