diff --git a/lib/config/config.dart b/lib/config/config.dart index b86765f..e53ecab 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -8,6 +8,7 @@ const GET_ALL_ORDERS = '/Patients.svc/REST/PatientER_Delivery_GetAllOrder'; const SCAN_QR = '/Patients.svc/REST/PatientER_Delivery_OrderInsert'; const UPDATE_ORDER_STATUS = '/Patients.svc/REST/PatientER_Delivery_UpdateOrderStatus'; +const NEXT_ORDER = "/Patients.svc/REST/PatientER_Delivery_NextOrder"; /// Body Constant const CHANNEL = 9; @@ -18,5 +19,3 @@ const MAX_SMALL_SCREEN = 660; class AppGlobal { static BuildContext context; } - - diff --git a/lib/core/model/orders/next_order_request_model.dart b/lib/core/model/orders/next_order_request_model.dart new file mode 100644 index 0000000..fdc5f90 --- /dev/null +++ b/lib/core/model/orders/next_order_request_model.dart @@ -0,0 +1,48 @@ +class NextOrderRequestModel { + int driverID; + String searchKey; + int pageSize; + int pageIndex; + String tokenID; + int userID; + String mobileNo; + String longitude; + String latitude; + + NextOrderRequestModel( + {this.driverID, + this.searchKey, + this.pageSize, + this.pageIndex, + this.tokenID, + this.userID, + this.mobileNo, + this.longitude, + this.latitude}); + + NextOrderRequestModel.fromJson(Map json) { + driverID = json['DriverID']; + searchKey = json['SearchKey']; + pageSize = json['PageSize']; + pageIndex = json['PageIndex']; + tokenID = json['TokenID']; + userID = json['UserID']; + mobileNo = json['MobileNo']; + longitude = json['Longitude']; + latitude = json['Latitude']; + } + + Map toJson() { + final Map data = new Map(); + data['DriverID'] = this.driverID; + data['SearchKey'] = this.searchKey; + data['PageSize'] = this.pageSize; + data['PageIndex'] = this.pageIndex; + data['TokenID'] = this.tokenID; + data['UserID'] = this.userID; + data['MobileNo'] = this.mobileNo; + data['Longitude'] = this.longitude; + data['Latitude'] = this.latitude; + return data; + } +} diff --git a/lib/core/model/orders/pending_orders_res_model.dart b/lib/core/model/orders/pending_orders_res_model.dart index 6809612..5b68b5d 100644 --- a/lib/core/model/orders/pending_orders_res_model.dart +++ b/lib/core/model/orders/pending_orders_res_model.dart @@ -24,7 +24,7 @@ class PendingOrdersRes { String dischargeID; String patientID; bool patientOutSA; - int distanceInKilometers; + dynamic distanceInKilometers; List itemsQuantitiesList; PendingOrdersRes( diff --git a/lib/core/service/orders_service.dart b/lib/core/service/orders_service.dart index 8b9ebee..d1f4f22 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/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'; import 'package:driverapp/core/model/orders/update_order_status_request_model.dart'; @@ -7,8 +8,11 @@ import 'package:driverapp/core/service/base_service.dart'; class OrdersService extends BaseService { List _orders = List(); + List _nextOrdersList = List(); List get orders => _orders; + + List get nextOrdersList => _nextOrdersList; bool isOrderInserted; bool isOrderStatusUpdated; @@ -73,4 +77,23 @@ class OrdersService extends BaseService { throw e; } } + + Future nextOrder(NextOrderRequestModel nextOrderRequestModel) async { + hasError = false; + try { + await baseAppClient.post(NEXT_ORDER, + onSuccess: (dynamic response, int statusCode) { + response["PatientER_Delivery_NextOrder"].forEach((order) { + _nextOrdersList.add(PendingOrdersRes.fromJson(order)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: nextOrderRequestModel.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 9a367ad..83a5549 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/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'; import 'package:driverapp/core/model/scan_qr/scan_qr_request_model.dart'; @@ -8,16 +9,18 @@ import '../../locator.dart'; import 'base_view_model.dart'; class OrdersViewModel extends BaseViewModel { - OrdersService _OrdersService = locator(); + OrdersService _ordersService = locator(); - List get orders => _OrdersService.orders; + List get orders => _ordersService.orders; + + List get nextOrdersList => _ordersService.nextOrdersList; bool isBottomSheetAppear = false; Future getPendingOrders() async { setState(ViewState.Busy); - await _OrdersService.getPendingOrders(); - if (_OrdersService.hasError) { - error = _OrdersService.error; + await _ordersService.getPendingOrders(); + if (_ordersService.hasError) { + error = _ordersService.error; setState(ViewState.Error); } else setState(ViewState.Idle); @@ -25,9 +28,9 @@ class OrdersViewModel extends BaseViewModel { Future insertOrder(ScanQrRequestModel _scanQrRequestModel) async { setState(ViewState.ErrorLocal); - await _OrdersService.insertOrder(_scanQrRequestModel); - if (_OrdersService.hasError) { - error = _OrdersService.error; + await _ordersService.insertOrder(_scanQrRequestModel); + if (_ordersService.hasError) { + error = _ordersService.error; setState(ViewState.ErrorLocal); } else setState(ViewState.Idle); @@ -36,9 +39,19 @@ class OrdersViewModel extends BaseViewModel { Future updateOrderStatus( UpdateOrderStatusRequestModel updateOrderStatusRequestModel) async { setState(ViewState.BusyLocal); - await _OrdersService.updateOrderStatus(updateOrderStatusRequestModel); - if (_OrdersService.hasError) { - error = _OrdersService.error; + await _ordersService.updateOrderStatus(updateOrderStatusRequestModel); + if (_ordersService.hasError) { + error = _ordersService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } + + Future nextOrder(NextOrderRequestModel nextOrderRequestModel) async { + setState(ViewState.BusyLocal); + await _ordersService.nextOrder(nextOrderRequestModel); + if (_ordersService.hasError) { + error = _ordersService.error; setState(ViewState.ErrorLocal); } else setState(ViewState.Idle); diff --git a/lib/pages/dashboard/dashboard_screen.dart b/lib/pages/dashboard/dashboard_screen.dart index 8b5cf96..d62ab89 100644 --- a/lib/pages/dashboard/dashboard_screen.dart +++ b/lib/pages/dashboard/dashboard_screen.dart @@ -14,7 +14,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 { @@ -100,7 +100,10 @@ class _DashboardScreenState extends State { Padding( padding: EdgeInsets.symmetric(horizontal: 10.0), child: Container( - height: MediaQuery.of(context).size.height * 0.16, + height: MediaQuery.of(context).orientation == + Orientation.portrait + ? MediaQuery.of(context).size.height * 0.16 + : MediaQuery.of(context).size.height * 0.30, width: MediaQuery.of(context).size.width * 0.44, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), @@ -122,21 +125,37 @@ class _DashboardScreenState extends State { Text( TranslationBase.of(context).youHave, style: TextStyle( - color: Colors.white, - fontSize: 10.0), + color: Colors.white, + fontSize: MediaQuery.of(context) + .orientation == + Orientation.landscape + ? SizeConfig.textMultiplier * + 2.2 + : SizeConfig.textMultiplier * + 1.3, + ), ), Text( '5', style: TextStyle( color: Colors.white, - fontSize: 25.0), + fontSize: + SizeConfig.textMultiplier * + 3.0), ), Text( TranslationBase.of(context) .undeliveredPackages, style: TextStyle( - color: Colors.white, - fontSize: 9.5), + color: Colors.white, + fontSize: MediaQuery.of(context) + .orientation == + Orientation.landscape + ? SizeConfig.textMultiplier * + 2.2 + : SizeConfig.textMultiplier * + 1.3, + ), ) ], ), @@ -145,8 +164,8 @@ class _DashboardScreenState extends State { Padding( padding: EdgeInsets.only(right: 9.5), child: Container( - width: 110, - height: 110, + width: 100, + height: 100, decoration: BoxDecoration( color: Colors.white10, shape: BoxShape.circle), @@ -157,9 +176,16 @@ class _DashboardScreenState extends State { Image.asset( 'assets/images/closed_box.png', height: MediaQuery.of(context) - .size - .height * - 0.10, + .orientation == + Orientation.portrait + ? MediaQuery.of(context) + .size + .height * + 0.09 + : MediaQuery.of(context) + .size + .height * + 0.20, width: MediaQuery.of(context) .size .width * @@ -184,7 +210,10 @@ class _DashboardScreenState extends State { Padding( padding: EdgeInsets.symmetric(horizontal: 10.0), child: Container( - height: MediaQuery.of(context).size.height * 0.16, + height: MediaQuery.of(context).orientation == + Orientation.portrait + ? MediaQuery.of(context).size.height * 0.16 + : MediaQuery.of(context).size.height * 0.30, width: MediaQuery.of(context).size.width * 0.45, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), @@ -206,21 +235,37 @@ class _DashboardScreenState extends State { Text( TranslationBase.of(context).youHave, style: TextStyle( - color: Colors.white, - fontSize: 10.0), + color: Colors.white, + fontSize: MediaQuery.of(context) + .orientation == + Orientation.landscape + ? SizeConfig.textMultiplier * + 2.2 + : SizeConfig.textMultiplier * + 1.3, + ), ), Text( - '25', + '5', style: TextStyle( color: Colors.white, - fontSize: 25.0), + fontSize: + SizeConfig.textMultiplier * + 3.0), ), Text( TranslationBase.of(context) - .deliveredPackages, + .undeliveredPackages, style: TextStyle( - color: Colors.white, - fontSize: 10.0), + color: Colors.white, + fontSize: MediaQuery.of(context) + .orientation == + Orientation.landscape + ? SizeConfig.textMultiplier * + 2.2 + : SizeConfig.textMultiplier * + 1.3, + ), ) ], ), @@ -229,8 +274,8 @@ class _DashboardScreenState extends State { Padding( padding: EdgeInsets.only(right: 9.5), child: Container( - width: 110, - height: 110, + width: 100, + height: 100, decoration: BoxDecoration( color: Colors.white10, shape: BoxShape.circle), @@ -241,9 +286,16 @@ class _DashboardScreenState extends State { Image.asset( 'assets/images/opend_box.png', height: MediaQuery.of(context) - .size - .height * - 0.10, + .orientation == + Orientation.portrait + ? MediaQuery.of(context) + .size + .height * + 0.09 + : MediaQuery.of(context) + .size + .height * + 0.20, width: MediaQuery.of(context) .size .width * @@ -274,7 +326,7 @@ class _DashboardScreenState extends State { height: MediaQuery.of(context).orientation == Orientation.portrait ? MediaQuery.of(context).size.height * 0.18 - : MediaQuery.of(context).size.height * 0.28, + : MediaQuery.of(context).size.height * 0.30, width: MediaQuery.of(context).size.width * 0.50, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), @@ -295,8 +347,13 @@ class _DashboardScreenState extends State { 'assets/images/qr_code.png', width: MediaQuery.of(context).size.width * 0.26, - height: MediaQuery.of(context).size.height * - 0.14, + height: MediaQuery.of(context) + .orientation == + Orientation.portrait + ? MediaQuery.of(context).size.height * + 0.14 + : MediaQuery.of(context).size.height * + 0.28, fit: BoxFit.contain, ) ], @@ -315,7 +372,11 @@ class _DashboardScreenState extends State { child: Text( TranslationBase.of(context).scan, style: TextStyle( - fontSize: 35.0, + fontSize: MediaQuery.of(context) + .orientation == + Orientation.landscape + ? SizeConfig.textMultiplier * 6.0 + : SizeConfig.textMultiplier * 4.0, color: Colors.white, fontWeight: FontWeight.w400, ), @@ -328,7 +389,11 @@ class _DashboardScreenState extends State { TranslationBase.of(context) .toAddPackageToQue, style: TextStyle( - fontSize: 15.0, + fontSize: MediaQuery.of(context) + .orientation == + Orientation.landscape + ? SizeConfig.textMultiplier * 3.0 + : SizeConfig.textMultiplier * 2.0, color: Colors.white, letterSpacing: 0.2, wordSpacing: 0.5, @@ -478,13 +543,6 @@ class _DashboardScreenState extends State { fontSize: 15.0, ), ), - Expanded( - child: Text( - 'Olaya ST, Behind kfc next to king , ', - style: TextStyle( - color: Color(0xff636363)), - ), - ), ], ), ), diff --git a/lib/pages/delivery/delivery_confirmed_page.dart b/lib/pages/delivery/delivery_confirmed_page.dart index 60c7645..2a4a57d 100644 --- a/lib/pages/delivery/delivery_confirmed_page.dart +++ b/lib/pages/delivery/delivery_confirmed_page.dart @@ -1,3 +1,10 @@ +import 'package:driverapp/core/enum/viewstate.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/viewModels/orders_view_model.dart'; +import 'package:driverapp/pages/base/base_view.dart'; +import 'package:driverapp/pages/delivery/information_page.dart'; +import 'package:driverapp/uitl/utils.dart'; import 'package:driverapp/widgets/buttons/secondary_button.dart'; import 'package:driverapp/widgets/delivery/customer_brief_card.dart'; import 'package:flutter/cupertino.dart'; @@ -7,14 +14,15 @@ import '../../uitl/translations_delegate_base.dart'; import '../../widgets/others/app_scaffold_widget.dart'; class DeliveryConfirmedPage extends StatelessWidget { - final dynamic item; + final PendingOrdersRes item; DeliveryConfirmedPage(this.item); @override Widget build(BuildContext context) { - return AppScaffold( - isShowAppBar: true, + return BaseView( + builder: (_, model, w) => AppScaffold( + isShowAppBar: true, appBarColor: Theme.of(context).primaryColor, arrowColor: Colors.white, titleColor: Colors.white, @@ -24,10 +32,10 @@ class DeliveryConfirmedPage extends StatelessWidget { child: ListView( children: [ Stack( - children: [ - Column( - children: [ - Container( + children: [ + Column( + children: [ + Container( child: Column( children: [ Container( @@ -48,15 +56,15 @@ class DeliveryConfirmedPage extends StatelessWidget { SizedBox( height: MediaQuery.of(context).size.width * 0.03, - ), - Text( - TranslationBase.of(context).deliveryInfo, - style: TextStyle( - color: Colors.white, - fontSize: 20, - fontWeight: FontWeight.bold), - ), - SizedBox( + ), + Text( + TranslationBase.of(context).deliveryInfo, + style: TextStyle( + color: Colors.white, + fontSize: 20, + fontWeight: FontWeight.bold), + ), + SizedBox( height: MediaQuery.of(context).size.width * 0.03, ), @@ -125,8 +133,9 @@ class DeliveryConfirmedPage extends StatelessWidget { margin: EdgeInsets.all(10), child: SecondaryButton( label: TranslationBase.of(context).nextDelivery, - onTap: () {}, - ), + onTap: () { + getNextOrder(context, model); + },), ), ], ), @@ -149,10 +158,34 @@ class DeliveryConfirmedPage extends StatelessWidget { ), ], ), - ], + ],), ), ), ), ); } + + getNextOrder(BuildContext context, OrdersViewModel model) async { + NextOrderRequestModel nextOrderRequestModel = NextOrderRequestModel( + pageIndex: 0, + pageSize: 0, + latitude: "46.621730", + longitude: "24.797682", + searchKey: ""); + await model.nextOrder(nextOrderRequestModel); + if (model.state == ViewState.ErrorLocal) { + Utils.showErrorToast(model.error); + } else { + if (model.nextOrdersList != null && model.nextOrdersList.length == 0) { + Utils.showErrorToast("No Items in the list"); + } else { + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) => InformationPage(model.nextOrdersList[0]), + ), + ); + } + } + } } diff --git a/lib/pages/delivery/information_page.dart b/lib/pages/delivery/information_page.dart index 13eeacd..2c02893 100644 --- a/lib/pages/delivery/information_page.dart +++ b/lib/pages/delivery/information_page.dart @@ -1 +1 @@ -import 'package:driverapp/app-icons/driver_app_icons.dart'; import 'package:driverapp/core/enum/viewstate.dart'; import 'package:driverapp/core/model/orders/pending_orders_res_model.dart'; import 'package:driverapp/core/model/orders/update_order_status_request_model.dart'; import 'package:driverapp/core/viewModels/orders_view_model.dart'; import 'package:driverapp/pages/base/base_view.dart'; import 'package:driverapp/pages/delivery/delivery_confirmed_page.dart'; import 'package:driverapp/uitl/utils.dart'; import 'package:driverapp/widgets/bottom_sheet/action_sheet_button.dart'; import 'package:driverapp/widgets/bottom_sheet/custom_bottom_sheet.dart'; import 'package:driverapp/widgets/buttons/secondary_button.dart'; import 'package:driverapp/widgets/data_display/dialog/custom_dialog.dart'; import 'package:driverapp/widgets/data_display/text.dart'; import 'package:driverapp/widgets/delivery/customer_brief_card.dart'; import 'package:driverapp/widgets/delivery/delivery_action_button.dart'; import 'package:driverapp/widgets/delivery/package_content.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:maps_launcher/maps_launcher.dart'; import '../../uitl/translations_delegate_base.dart'; import '../../widgets/others/app_scaffold_widget.dart'; class InformationPage extends StatelessWidget { final PendingOrdersRes item; int orderStatus; InformationPage(this.item); @override Widget build(BuildContext context) { return BaseView( builder: (_, model, w) => AppScaffold( isShowAppBar: true, appBarColor: Theme.of(context).primaryColor, arrowColor: Colors.white, titleColor: Colors.white, appBarTitle: TranslationBase.of(context).deliveryInfo, body: Container( color: Theme.of(context).primaryColor, child: Container( color: Theme.of(context).primaryColor, child: ListView( children: [ Column( children: [ Stack( children: [ // Container( // width: MediaQuery.of(context).size.width, // height: MediaQuery.of(context).size.width, // ), Container( width: MediaQuery.of(context).size.width * 1, height: MediaQuery.of(context).size.width * 1.5, margin: EdgeInsets.only( top: MediaQuery.of(context).size.width * 0.23, ), decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, borderRadius: BorderRadius.only( topLeft: Radius.circular(45), topRight: Radius.circular(45)), ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: MediaQuery.of(context).size.width * 0.23, //MediaQuery.of(context).size.width * 0.005, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ DeliveryInfoButton( btnColor: Colors.white,//Color(0xffED1C24), btnIcon: Icon( DriverApp.location_1, size: 40, color: Color(0xffED1C24) ), btnName: TranslationBase.of(context).location, btnFunction: () { MapsLauncher.launchCoordinates( item.latitude, item.longitude); },), DeliveryInfoButton( btnColor: Colors.white,//Color(0xFF61B260), btnIcon: Icon( DriverApp.whatsapp, size: 40, color: Color(0xFF61B260), ), btnName: 'Whatsapp', btnFunction: () {}, ), DeliveryInfoButton( btnColor: Colors.white,//Color(0xFFFCB657), btnIcon: Icon( DriverApp.message, size: 40, color: Color(0xFFFCB657), ), btnName: TranslationBase.of(context).sms, btnFunction: () {}, ), DeliveryInfoButton( btnColor: Colors.white,//Theme.of(context).primaryColor, btnIcon: Icon( DriverApp.call, size: 40, color: Theme.of(context).primaryColor, ), btnName: TranslationBase.of(context).call, btnFunction: () => launch("tel://" + item.mobileNumber), ), ], ), SizedBox( height: MediaQuery.of(context).size.width * 0.1, ), Container( margin: EdgeInsets.only( left: MediaQuery.of(context).size.width * 0.05, right: MediaQuery.of(context).size.width * 0.05, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(left: 8), child: Text( TranslationBase.of(context) .packageContent, style: TextStyle( fontWeight: FontWeight.w900, fontSize: 20), ), ), SizedBox( height: MediaQuery.of(context).size.width * 0.05, ), Padding( padding: const EdgeInsets.only(left: 10), child: Column( children: List.generate( item.itemsQuantitiesList.length, (index) { return packageContent( packageName: item .itemsQuantitiesList[index] .itemName .toString(), packageCount: item .itemsQuantitiesList[index] .quantity .toString(), ); }), ), ), SizedBox( height: MediaQuery.of(context).size.width * 0.01, ), ], ), ), SizedBox( height: MediaQuery.of(context).size.width * 0.1, ), Container( margin: EdgeInsets.all(10), child: SecondaryButton( label: TranslationBase.of(context).clientReached, onTap: () { model.showBottomSheet(); }, ), ), ], ), ), CustomerBriefCard( itemId: item.orderID, customerFirstName: item.firstName, customerLastName: item.lastName, mobileNo: item.mobileNumber, totalPayment: item.amount, deliveryTime: item.orderCreatedOn, longitude: item.longitude, latitude: item.latitude, ),], ), ], ), ], ), ), ), bottomSheet: !model.isBottomSheetAppear ? Container( width: 0, height: 0, ) : CustomBottomSheet(children: [ SizedBox( height: 10, ), Center( child: Texts( TranslationBase.of(context).selectAction, color: Colors.black, fontSize: 22, ), ), SizedBox( height: 10, ), FractionallySizedBox( widthFactor: 0.9, child: Column( children: [ SizedBox( height: 3, child: Container( color: Hexcolor("#D5D5D5"), ), ), SizedBox( height: 15, ), ActionSheetButton( label: TranslationBase .of(context) .delivered, icon: DriverApp.deliverd_icon, onTap: () { selectAction(context, 3, model); }, ), SizedBox( height: 15 ), ActionSheetButton( label: TranslationBase .of(context) .deliveredAccepted, icon: DriverApp.not_available, onTap: () { selectAction(context, 4, model); }, ), SizedBox( height: 15 ), ActionSheetButton( label: TranslationBase .of(context) .deliveredRejected, icon: DriverApp.rejected_icon, onTap: () { selectAction(context, 5, model); }, ), SizedBox( height: 15 ), ActionSheetButton( label: TranslationBase .of(context) .canceled, icon: DriverApp.not_reachable_icon, onTap: () { selectAction(context, 6, model); }, ), SizedBox( height: 15 ), ], )), ]), ), ); } selectAction(BuildContext context, orderStatus, OrdersViewModel model) { String orderStatusText; this.orderStatus = orderStatus; switch (orderStatus) { case 3: orderStatusText = TranslationBase .of(context) .delivered; break; case 4: orderStatusText = TranslationBase .of(context) .deliveredAccepted; break; case 5: orderStatusText = TranslationBase .of(context) .deliveredRejected; break; case 6: orderStatusText = TranslationBase .of(context) .canceled; break; } showDialog( context: context, builder: (BuildContext context) { return CustomDialog( orderStatusText: orderStatusText, callService: () { updateOrderStatus(context, model); }, model: model,); }); } updateOrderStatus(BuildContext context, OrdersViewModel model) async { UpdateOrderStatusRequestModel updateOrderStatusRequestModel = UpdateOrderStatusRequestModel(deliveryOrderID: item.orderID, deliveryOrderStatus: orderStatus, rejectionReason: "NO Reason", cancleReason: ""); await model.updateOrderStatus(updateOrderStatusRequestModel); if (model.state == ViewState.ErrorLocal) { Utils.showErrorToast(model.error); Navigator.of(context).pop(); model.hideBottomSheet(); } else { Navigator.of(context).pop(); model.hideBottomSheet(); Navigator.push( context, MaterialPageRoute( builder: (context) => DeliveryConfirmedPage(item), ), ); } } } \ No newline at end of file +import 'package:driverapp/app-icons/driver_app_icons.dart'; import 'package:driverapp/core/enum/viewstate.dart'; import 'package:driverapp/core/model/orders/pending_orders_res_model.dart'; import 'package:driverapp/core/model/orders/update_order_status_request_model.dart'; import 'package:driverapp/core/viewModels/orders_view_model.dart'; import 'package:driverapp/pages/base/base_view.dart'; import 'package:driverapp/pages/delivery/delivery_confirmed_page.dart'; import 'package:driverapp/uitl/utils.dart'; import 'package:driverapp/widgets/bottom_sheet/action_sheet_button.dart'; import 'package:driverapp/widgets/bottom_sheet/custom_bottom_sheet.dart'; import 'package:driverapp/widgets/buttons/secondary_button.dart'; import 'package:driverapp/widgets/data_display/dialog/custom_dialog.dart'; import 'package:driverapp/widgets/data_display/text.dart'; import 'package:driverapp/widgets/delivery/customer_brief_card.dart'; import 'package:driverapp/widgets/delivery/delivery_action_button.dart'; import 'package:driverapp/widgets/delivery/package_content.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:maps_launcher/maps_launcher.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../uitl/translations_delegate_base.dart'; import '../../widgets/others/app_scaffold_widget.dart'; class InformationPage extends StatelessWidget { final PendingOrdersRes item; int orderStatus; InformationPage(this.item); @override Widget build(BuildContext context) { return BaseView( builder: (_, model, w) => AppScaffold( isShowAppBar: true, appBarColor: Theme.of(context).primaryColor, arrowColor: Colors.white, titleColor: Colors.white, appBarTitle: TranslationBase.of(context).deliveryInfo, body: Container( color: Theme.of(context).primaryColor, child: Container( color: Theme.of(context).primaryColor, child: ListView( children: [ Column( children: [ Stack( children: [ // Container( // width: MediaQuery.of(context).size.width, // height: MediaQuery.of(context).size.width, // ), Container( width: MediaQuery.of(context).size.width * 1, height: MediaQuery.of(context).size.width * 1.5, margin: EdgeInsets.only( top: MediaQuery.of(context).size.width * 0.23, ), decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, borderRadius: BorderRadius.only( topLeft: Radius.circular(45), topRight: Radius.circular(45)), ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: MediaQuery.of(context).size.width * 0.23, //MediaQuery.of(context).size.width * 0.005, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ DeliveryInfoButton( btnColor: Colors.white,//Color(0xffED1C24), btnIcon: Icon( DriverApp.location_1, size: 40, color: Color(0xffED1C24) ), btnName: TranslationBase.of(context).location, btnFunction: () { MapsLauncher.launchCoordinates( item.latitude, item.longitude); },), DeliveryInfoButton( btnColor: Colors.white,//Color(0xFF61B260), btnIcon: Icon( DriverApp.whatsapp, size: 40, color: Color(0xFF61B260), ), btnName: 'Whatsapp', btnFunction: () {}, ), DeliveryInfoButton( btnColor: Colors.white,//Color(0xFFFCB657), btnIcon: Icon( DriverApp.message, size: 40, color: Color(0xFFFCB657), ), btnName: TranslationBase.of(context).sms, btnFunction: () {}, ), DeliveryInfoButton( btnColor: Colors.white,//Theme.of(context).primaryColor, btnIcon: Icon( DriverApp.call, size: 40, color: Theme.of(context).primaryColor, ), btnName: TranslationBase.of(context).call, btnFunction: () => launch("tel://" + item.mobileNumber), ), ], ), SizedBox( height: MediaQuery.of(context).size.width * 0.1, ), Container( margin: EdgeInsets.only( left: MediaQuery.of(context).size.width * 0.05, right: MediaQuery.of(context).size.width * 0.05, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(left: 8), child: Text( TranslationBase.of(context) .packageContent, style: TextStyle( fontWeight: FontWeight.w900, fontSize: 20), ), ), SizedBox( height: MediaQuery.of(context).size.width * 0.05, ), Padding( padding: const EdgeInsets.only(left: 10), child: Column( children: List.generate( item.itemsQuantitiesList != null ? item .itemsQuantitiesList.length : 0, (index) { return packageContent( packageName: item .itemsQuantitiesList[index] .itemName .toString(), packageCount: item .itemsQuantitiesList[index] .quantity .toString(), ); }), ), ), SizedBox( height: MediaQuery.of(context).size.width * 0.01, ), ], ), ), SizedBox( height: MediaQuery.of(context).size.width * 0.1, ), Container( margin: EdgeInsets.all(10), child: SecondaryButton( label: TranslationBase.of(context).clientReached, onTap: () { model.showBottomSheet(); }, ), ), ], ), ), CustomerBriefCard( itemId: item.orderID, customerFirstName: item.firstName, customerLastName: item.lastName, mobileNo: item.mobileNumber, totalPayment: item.amount, deliveryTime: item.orderCreatedOn, longitude: item.longitude, latitude: item.latitude, ),], ), ], ), ], ), ), ), bottomSheet: !model.isBottomSheetAppear ? Container( width: 0, height: 0, ) : CustomBottomSheet(children: [ SizedBox( height: 10, ), Center( child: Texts( TranslationBase.of(context).selectAction, color: Colors.black, fontSize: 22, ), ), SizedBox( height: 10, ), FractionallySizedBox( widthFactor: MediaQuery.of(context).orientation == Orientation.portrait ? 0.9 : 0.98, child: Container( height: MediaQuery.of(context).size.height * 0.43, width: double.infinity, child: ListView( children: [ Column( children: [ SizedBox( height: 3, child: Container( color: Hexcolor("#D5D5D5"), ), ), SizedBox( height: 15, ), ActionSheetButton( label: TranslationBase.of(context).delivered, icon: DriverApp.deliverd_icon, onTap: () { selectAction(context, 3, model); }, ), SizedBox(height: 15), ActionSheetButton( label: TranslationBase.of(context) .deliveredAccepted, icon: DriverApp.not_available, onTap: () { selectAction(context, 4, model); }, ), SizedBox(height: 15), ActionSheetButton( label: TranslationBase.of(context) .deliveredRejected, icon: DriverApp.rejected_icon, onTap: () { selectAction(context, 5, model); }, ), SizedBox(height: 15), ActionSheetButton( label: TranslationBase.of(context).canceled, icon: DriverApp.not_reachable_icon, onTap: () { selectAction(context, 6, model); }, ), SizedBox(height: 15), ], ), ], ), )), ]), ), ); } selectAction(BuildContext context, orderStatus, OrdersViewModel model) { String orderStatusText; this.orderStatus = orderStatus; switch (orderStatus) { case 3: orderStatusText = TranslationBase .of(context) .delivered; break; case 4: orderStatusText = TranslationBase .of(context) .deliveredAccepted; break; case 5: orderStatusText = TranslationBase .of(context) .deliveredRejected; break; case 6: orderStatusText = TranslationBase .of(context) .canceled; break; } showDialog( context: context, builder: (BuildContext context) { return CustomDialog( orderStatusText: orderStatusText, callService: () { updateOrderStatus(context, model); }, model: model,); }); } updateOrderStatus(BuildContext context, OrdersViewModel model) async { UpdateOrderStatusRequestModel updateOrderStatusRequestModel = UpdateOrderStatusRequestModel(deliveryOrderID: item.orderID, deliveryOrderStatus: orderStatus, rejectionReason: "NO Reason", cancleReason: ""); await model.updateOrderStatus(updateOrderStatusRequestModel); if (model.state == ViewState.ErrorLocal) { Utils.showErrorToast(model.error); Navigator.of(context).pop(); model.hideBottomSheet(); } else { Navigator.of(context).pop(); model.hideBottomSheet(); Navigator.pushReplacement( context, MaterialPageRoute( builder: (context) => DeliveryConfirmedPage(item), ), ); } } } \ No newline at end of file diff --git a/lib/pages/orders/pending_orders_page.dart b/lib/pages/orders/pending_orders_page.dart index acfe0a5..69c4c15 100644 --- a/lib/pages/orders/pending_orders_page.dart +++ b/lib/pages/orders/pending_orders_page.dart @@ -96,13 +96,6 @@ class _OrdersListScreenState extends State { fontSize: 15.0, ), ), - Expanded( - child: Text( - 'Olaya ST, Behind kfc next to king', - style: - TextStyle(color: Color(0xff636363)), - ), - ), ], ), ), diff --git a/lib/widgets/data_display/dialog/custom_dialog.dart b/lib/widgets/data_display/dialog/custom_dialog.dart index 5b1cb9c..afd1a3b 100644 --- a/lib/widgets/data_display/dialog/custom_dialog.dart +++ b/lib/widgets/data_display/dialog/custom_dialog.dart @@ -1,3 +1,4 @@ +import 'package:driverapp/config/size_config.dart'; import 'package:driverapp/core/enum/viewstate.dart'; import 'package:driverapp/core/viewModels/orders_view_model.dart'; import 'package:driverapp/pages/base/base_view.dart'; @@ -20,7 +21,9 @@ class CustomDialog extends StatelessWidget { return BaseView( builder: (_, model, w) => Center( child: Container( - height: MediaQuery.of(context).size.height * 0.50, + height: SizeConfig.isPortrait + ? MediaQuery.of(context).size.height * 0.43 + : MediaQuery.of(context).size.height * 0.90, width: MediaQuery.of(context).size.width * 0.95, child: Dialog( shape: RoundedRectangleBorder( @@ -50,7 +53,7 @@ class CustomDialog extends StatelessWidget { height: 40, ), FractionallySizedBox( - widthFactor: 0.8, + widthFactor: SizeConfig.isPortrait ? 0.9 : 0.8, child: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ @@ -64,28 +67,35 @@ class CustomDialog extends StatelessWidget { SizedBox( height: 10, ), - SecondaryButton( - label: TranslationBase - .of(context) - .confirm, - loading: model.state == ViewState.BusyLocal, - onTap: () { - model.setState(ViewState.BusyLocal); - callService(); - }, - ), - SizedBox( - height: 10, - ), - SecondaryButton( - label: TranslationBase - .of(context) - .canceled, - onTap: () { - model.hideBottomSheet(); - Navigator.of(context).pop(); - }, + FractionallySizedBox( + widthFactor: 0.9, + child: Column( + children: [ + SecondaryButton( + label: TranslationBase + .of(context) + .confirm, + loading: model.state == ViewState.BusyLocal, + onTap: () { + model.setState(ViewState.BusyLocal); + callService(); + }, + ), SizedBox( + height: 10, + ), + SecondaryButton( + label: TranslationBase + .of(context) + .canceled, + onTap: () { + model.hideBottomSheet(); + Navigator.of(context).pop(); + }, + ), + ], + ), ), + ], ), )