From 783f7fcbf5209e72880cf0f4212bec2ab638f1a2 Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Mon, 7 Sep 2020 13:55:10 +0300 Subject: [PATCH] add order list info --- lib/core/service/orders_service.dart | 42 +++++- lib/core/viewModels/orders_view_model.dart | 14 ++ lib/pages/dashboard/dashboard_screen.dart | 88 ++++++------ lib/pages/orders/deliverd_orders_page.dart | 147 +++++++++++++++++++++ 4 files changed, 248 insertions(+), 43 deletions(-) create mode 100644 lib/pages/orders/deliverd_orders_page.dart diff --git a/lib/core/service/orders_service.dart b/lib/core/service/orders_service.dart index d1f4f22..bbe7851 100644 --- a/lib/core/service/orders_service.dart +++ b/lib/core/service/orders_service.dart @@ -1,4 +1,5 @@ import 'package:driverapp/config/config.dart'; +import 'package:driverapp/core/model/orders/deliverd_order_req_model.dart'; import 'package:driverapp/core/model/orders/next_order_request_model.dart'; import 'package:driverapp/core/model/orders/pending_orders_req_model.dart'; import 'package:driverapp/core/model/orders/pending_orders_res_model.dart'; @@ -9,9 +10,12 @@ import 'package:driverapp/core/service/base_service.dart'; class OrdersService extends BaseService { List _orders = List(); List _nextOrdersList = List(); + List _deliverdOrderList = List(); List get orders => _orders; + List get deliverdOrderList => _deliverdOrderList; + List get nextOrdersList => _nextOrdersList; bool isOrderInserted; bool isOrderStatusUpdated; @@ -22,6 +26,14 @@ class OrdersService extends BaseService { pageIndex: 0, ); + DeliverdOrderModel _requestGetDeliverdOrders = DeliverdOrderModel( + searchKey: "", + pageSize: 0, + pageIndex: 0, + latitude: "24.640000", + longitude: "46.753000", + ); + Future getPendingOrders() async { hasError = false; try { @@ -86,13 +98,35 @@ class OrdersService extends BaseService { response["PatientER_Delivery_NextOrder"].forEach((order) { _nextOrdersList.add(PendingOrdersRes.fromJson(order)); }); - }, onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, body: nextOrderRequestModel.toJson()); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: nextOrderRequestModel.toJson()); + } catch (e) { + hasError = true; + super.error = error; + throw e; + } + } + + Future getDeliverdList() async { + hasError = false; + try { + await baseAppClient.post(GET_ALL_DELIVERD_ORDER, + onSuccess: (dynamic response, int statusCode) { + _deliverdOrderList.clear(); + response['PatientER_Delivery_GetAllDeliverdOrderList'].forEach(( + order) { + _deliverdOrderList.add(DeliverdOrderModel.fromJson(order)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _requestGetPendingOrders.toJson()); } 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 83a5549..4d825b4 100644 --- a/lib/core/viewModels/orders_view_model.dart +++ b/lib/core/viewModels/orders_view_model.dart @@ -1,4 +1,5 @@ import 'package:driverapp/core/enum/viewstate.dart'; +import 'package:driverapp/core/model/orders/deliverd_order_req_model.dart'; import 'package:driverapp/core/model/orders/next_order_request_model.dart'; import 'package:driverapp/core/model/orders/pending_orders_res_model.dart'; import 'package:driverapp/core/model/orders/update_order_status_request_model.dart'; @@ -13,6 +14,9 @@ class OrdersViewModel extends BaseViewModel { List get orders => _ordersService.orders; + List get deliverdOrders => + _ordersService.deliverdOrderList; + List get nextOrdersList => _ordersService.nextOrdersList; bool isBottomSheetAppear = false; @@ -26,6 +30,16 @@ class OrdersViewModel extends BaseViewModel { setState(ViewState.Idle); } + Future getDeliverdOrders() async { + setState(ViewState.Busy); + await _ordersService.getDeliverdList(); + if (_ordersService.hasError) { + error = _ordersService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + Future insertOrder(ScanQrRequestModel _scanQrRequestModel) async { setState(ViewState.ErrorLocal); await _ordersService.insertOrder(_scanQrRequestModel); diff --git a/lib/pages/dashboard/dashboard_screen.dart b/lib/pages/dashboard/dashboard_screen.dart index 2dd3ba9..a8f9f8b 100644 --- a/lib/pages/dashboard/dashboard_screen.dart +++ b/lib/pages/dashboard/dashboard_screen.dart @@ -1,8 +1,10 @@ import 'package:barcode_scan/platform_wrapper.dart'; +import 'package:driverapp/config/size_config.dart'; import 'package:driverapp/core/enum/viewstate.dart'; import 'package:driverapp/core/model/scan_qr/scan_qr_request_model.dart'; import 'package:driverapp/core/viewModels/orders_view_model.dart'; import 'package:driverapp/pages/delivery/information_page.dart'; +import 'package:driverapp/pages/orders/deliverd_orders_page.dart'; import 'package:driverapp/pages/orders/pending_orders_page.dart'; import 'package:driverapp/uitl/app_toast.dart'; import 'package:driverapp/uitl/translations_delegate_base.dart'; @@ -14,7 +16,7 @@ import 'package:driverapp/widgets/others/rounded_container.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; -import 'package:driverapp/config/size_config.dart'; + import '../base/base_view.dart'; class DashboardScreen extends StatefulWidget { @@ -228,46 +230,54 @@ class _DashboardScreenState extends State { Expanded( child: Padding( padding: EdgeInsets.all(2.0), - child: Column( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Text( - TranslationBase.of(context).youHave, - style: TextStyle( - color: Colors.white, - fontSize: MediaQuery.of(context) - .orientation == - Orientation.landscape - ? SizeConfig.textMultiplier * - 2.2 - : SizeConfig.textMultiplier * - 1.3, - ), - ), - Text( - '5', - style: TextStyle( + child: InkWell( + onTap: () => Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + DeliverdOrdersPage()), + ), + child: Column( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Text( + TranslationBase.of(context).youHave, + style: TextStyle( color: Colors.white, - fontSize: - SizeConfig.textMultiplier * - 3.0), - ), - Text( - TranslationBase.of(context) - .undeliveredPackages, - style: TextStyle( - color: Colors.white, - fontSize: MediaQuery.of(context) - .orientation == - Orientation.landscape - ? SizeConfig.textMultiplier * - 2.2 - : SizeConfig.textMultiplier * - 1.3, + fontSize: MediaQuery.of(context) + .orientation == + Orientation.landscape + ? SizeConfig.textMultiplier * + 2.2 + : SizeConfig.textMultiplier * + 1.3, + ), ), - ) - ], + Text( + '5', + style: TextStyle( + color: Colors.white, + fontSize: + SizeConfig.textMultiplier * + 3.0), + ), + Text( + TranslationBase.of(context) + .undeliveredPackages, + style: TextStyle( + color: Colors.white, + fontSize: MediaQuery.of(context) + .orientation == + Orientation.landscape + ? SizeConfig.textMultiplier * + 2.2 + : SizeConfig.textMultiplier * + 1.3, + ), + ) + ], + ), ), ), ), diff --git a/lib/pages/orders/deliverd_orders_page.dart b/lib/pages/orders/deliverd_orders_page.dart new file mode 100644 index 0000000..db4119f --- /dev/null +++ b/lib/pages/orders/deliverd_orders_page.dart @@ -0,0 +1,147 @@ +import 'package:driverapp/core/viewModels/orders_view_model.dart'; +import 'package:driverapp/pages/delivery/information_page.dart'; +import 'package:driverapp/uitl/translations_delegate_base.dart'; +import 'package:driverapp/widgets/data_display/circle-container.dart'; +import 'package:driverapp/widgets/others/app_scaffold_widget.dart'; +import 'package:driverapp/widgets/others/rounded_container.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +import '../base/base_view.dart'; + +class DeliverdOrdersPage extends StatefulWidget { + @override + _DeliverdOrdersPageState createState() => _DeliverdOrdersPageState(); +} + +class _DeliverdOrdersPageState extends State { + @override + Widget build(BuildContext context) { + return BaseView( + onModelReady: (model) => model.getDeliverdOrders(), + builder: (BuildContext context, OrdersViewModel model, Widget child) => + AppScaffold( + isShowAppBar: true, + appBarTitle: TranslationBase.of(context).yourDeliveryQue, + titleColor: Colors.black, + body: Column( + children: [ + Expanded( + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.vertical, + itemCount: model.orders == null ? 0 : model.orders.length, + itemBuilder: (BuildContext context, int index) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 12.2), + child: InkWell( + child: RoundedContainer( + raduis: 25.0, + height: MediaQuery.of(context).orientation == + Orientation.portrait + ? MediaQuery.of(context).size.height * 0.120 + : MediaQuery.of(context).size.height * 0.209, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + flex: 1, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: + EdgeInsets.only(left: 15.0, top: 14.0), + child: Image.asset( + 'assets/images/location.png', + height: MediaQuery.of(context) + .orientation == + Orientation.portrait + ? MediaQuery.of(context).size.height * + 0.06 + : MediaQuery.of(context).size.height * + 0.11, + width: MediaQuery.of(context) + .orientation == + Orientation.portrait + ? MediaQuery.of(context).size.width * + 0.05 + : MediaQuery.of(context).size.width * + 0.09, + ), + ) + ], + ), + ), + if (model.orders.length != 0) + Expanded( + flex: 5, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(top: 20.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( + model.orders[index].orderID.toString(), + style: TextStyle( + fontSize: 18.0, + fontWeight: FontWeight.w400, + letterSpacing: 8.0), + ), + ), + ], + ), + ), + Padding( + padding: EdgeInsets.all(8.0), + child: CircleContainer( + borderWidth: 0.8, + child: Text( + model.orders[index].distanceInKilometers + .toString() + + ' K.m\naway', + style: TextStyle( + color: Color(0xff42B6AD), + fontWeight: FontWeight.w800, + fontStyle: FontStyle.normal), + ), + ), + ), + ], + ), + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + InformationPage(model.orders[index]))); + }, + ), + ); + }, + ), + ), + ], + ), + ), + ); + } +}