import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:geolocator/geolocator.dart'; import 'package:healthcare_pharmacy/getmedicines.dart'; import 'package:healthcare_pharmacy/models/biddingrequest_model.dart'; import 'package:healthcare_pharmacy/models/getdeliveryboy_model.dart'; import 'package:healthcare_pharmacy/settings.dart'; import 'package:flutter_cupertino_datetime_picker/flutter_cupertino_datetime_picker.dart'; import 'package:intl/intl.dart'; import 'package:image_picker/image_picker.dart'; import 'package:photo_view/photo_view.dart'; class BiddingRequests extends StatefulWidget { const BiddingRequests({Key? key}) : super(key: key); @override State createState() => _BiddingRequestsState(); } class _BiddingRequestsState extends State { String Url = ''; List prescriptionsList = []; List modeldeliveryboyList = []; var dropdownAllDeliveryBoys; TextEditingController dateController = TextEditingController(); var selIOS; bool isPrescriptionsDataLoading = false; bool isSereverIssue = false; bool isLoading=false; Future getAllPrescriptions() async { isPrescriptionsDataLoading=true; try { var response = await AppSettings.getAllBiddingRecords(); /*for (var item in data) { BiddingRequestsModel biddingRequestsModel=new BiddingRequestsModel(); biddingRequestsModel.bidding_bookingid = item['bookingId']!; biddingRequestsModel.pharmacyid_bidding = item['pharmacyId']!; biddingRequestsModel.custumerid_bidding = item['customerId']!; biddingRequestsModel.amount_bidding = item['biddingAmount']!.toString(); String? firstName = item['customerDetails']?['firstName']; String? contactNumber = item['customerDetails']?['profile']?['contactNumber']; print('First Name: $firstName'); biddingRequestsModel.bidding_firstName = firstName ; // Provide a default value if firstName is null // biddingRequestsModel.bidding_contactNumber=contactNumber; prescriptionsList.add(biddingRequestsModel); }*/ setState(() { prescriptionsList = ((jsonDecode(response)['data']) as List).map((dynamic model) { return BiddingRequestsModel.fromJson(model); }).toList(); //String customerId=prescriptionsList[0].customerId.toString(); isPrescriptionsDataLoading = false; }); } catch (e) { setState(() { isLoading = false; isPrescriptionsDataLoading = false; }); } } Future getAllDeliveryBoys() async { var response1= await AppSettings.getAllDeliverboy(); print(response1); setState(() { modeldeliveryboyList = ((jsonDecode(response1)['deliveryBoys']) as List).map((dynamic model) { return GetDeliveryboyDetailsModel.fromJson(model); }).toList(); dropdownAllDeliveryBoys=modeldeliveryboyList[0]; }); } @override void initState() { getAllPrescriptions(); getAllDeliveryBoys(); //getAllPharmaciesData(dropdownArea); super.initState(); } showPicDialog(List prescriptionPictures) { int currentIndex = 0; showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return StatefulBuilder( builder: (BuildContext context, StateSetter setState) { return Dialog( // Your custom dialog design here child: Container( width: double.infinity, height: MediaQuery.of(context).size.height * 0.6, child: Column( children: [ Expanded( child: PageView.builder( itemCount: prescriptionPictures.length, controller: PageController(initialPage: currentIndex), onPageChanged: (index) { setState(() { currentIndex = index; }); }, itemBuilder: (BuildContext context, int index) { return Container( width: double.infinity, height: double.infinity, child: PhotoView( imageProvider: NetworkImage(prescriptionPictures[index].url), maxScale: PhotoViewComputedScale.contained * 4.0, minScale: PhotoViewComputedScale.contained, initialScale: PhotoViewComputedScale.contained, basePosition: Alignment.center, ), ); }, ), ), TextButton( child: Text('Close'), onPressed: () { Navigator.of(context).pop(); }, ), ], ), ), ); }, ); }, ); } Widget _allPrescriptions(){ if (prescriptionsList.length != 0) { return Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Expanded(child:ListView.builder( padding: EdgeInsets.all(0), itemCount: prescriptionsList.length, itemBuilder: (BuildContext context, int index) { return GestureDetector( onTap: () { // Your regular tap action logic goes here Navigator.push( context, new MaterialPageRoute( builder: (__) => new GetMedicines(medicinebookingid:prescriptionsList[index].bookingId))); }, onLongPress: () { showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return StatefulBuilder( builder: (BuildContext context, StateSetter setState) { return AlertDialog( title: const Text('Assign'), content: SingleChildScrollView( child: ListBody( children: [ Container( padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), child: DropdownButtonFormField( // Initial Value value: dropdownAllDeliveryBoys, isExpanded: true, decoration: const InputDecoration( prefixIcon: Icon( Icons.water, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'Select delivery boy', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), hint: Text('Select delivery boy'), // Down Arrow Icon icon: const Icon(Icons.keyboard_arrow_down), items: modeldeliveryboyList .map>( (value) => new DropdownMenuItem( value: value, child: new Text(value.deliveryboy_name), )) .toList(), onChanged: (GetDeliveryboyDetailsModel? newValue) { setState(() { dropdownAllDeliveryBoys = newValue; }); }, ), ), SizedBox( height: 05, ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, enabled: false, controller: dateController, textCapitalization: TextCapitalization.characters, decoration: const InputDecoration( prefixIcon: Icon( Icons.date_range, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'Select date & time', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), SizedBox( height: 05, ), ], ), ), actions: [ TextButton( child: Text('cancel', style: textButtonStyle()), onPressed: () { Navigator.of(context).pop(); }, ), TextButton( child: Text('Assign ', style: textButtonStyle()), onPressed: () async{ var payload = new Map(); payload["pharmacyname"] = AppSettings.pharmacyName; payload["pharmacyId"] = AppSettings.pharmacyId; payload["customerId"] = prescriptionsList[index].customerId; payload["address"] = prescriptionsList[index] .address; payload["dateOfOrder"] = prescriptionsList[index].bookingId; payload["action"] = "accept"; payload["price"] = prescriptionsList[index].amount; payload["delivery_agent"] = dropdownAllDeliveryBoys.deliveryboy_name; payload["agent_mobile"] = dropdownAllDeliveryBoys.deliveryboy_phone; payload["agent_alternative_mobile"] = dropdownAllDeliveryBoys.deliveryboy_alternativeContactNumber; payload["expectedDateOfDelivery"] =dateController.text.toString(); bool requestStatus = await AppSettings.assignDeliveryboyBookingRequests( prescriptionsList[index].bookingId, payload); if (requestStatus) { Navigator.of(context).pop(); AppSettings.longSuccessToast( "Delivery Boy Assigned Successfully"); await getAllPrescriptions(); } else {} }, ), IconButton( onPressed: () async { DatePicker.showDatePicker( context, dateFormat: 'dd MMMM yyyy HH:mm', initialDateTime: DateTime.now(), minDateTime:DateTime.now(), maxDateTime: DateTime.now().add(Duration(days: 15)), onMonthChangeStartWithFirstDate: true, pickerMode: DateTimePickerMode.datetime, pickerTheme: DateTimePickerTheme( // backgroundColor: Colors.white, cancelTextStyle: labelTextStyle(), confirmTextStyle: labelTextStyle(), // showTitle: true, //title: Text('Pick date and time'), itemTextStyle: valuesTextStyle(), ), onConfirm: (dateTime, List index)async { DateTime selectdate = dateTime; setState(() { selIOS = DateFormat('dd-MMM-yyyy - HH:mm').format(selectdate); }); if(selIOS!=''){ setState(() { dateController.text=selIOS.toString(); }); } else { AppSettings.longFailedToast('please select date'); } }, ); }, icon: Icon( Icons.calendar_month, color: primaryColor, )) ], ); }); }, ); }, child: Card( //color: prescriptionsList[index].cardColor, child: Padding( padding:EdgeInsets.all(8) , child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ GestureDetector( child: Container( width: MediaQuery.of(context).size.width * 0.18, height: MediaQuery.of(context).size.height * 0.10, decoration: BoxDecoration( shape: BoxShape.circle, image: DecorationImage( image: NetworkImage(prescriptionsList[index].PrescriptionPictures[0].url ?? "images/logo.png"), fit: BoxFit.cover, ), ), ), onTap: () { // Handle onTap event if needed showPicDialog(prescriptionsList[index].PrescriptionPictures); }, ), SizedBox(width:MediaQuery.of(context).size.width * .02,), Container( width: MediaQuery.of(context).size.width * .55, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(prescriptionsList[index].firstName.toString().toUpperCase(),style: valuesTextStyle()), Text(prescriptionsList[index].bookingId.toString().toUpperCase(),style: valuesTextStyle()), Text(prescriptionsList[index].address.toString().toUpperCase(),style: valuesTextStyle()), Text(prescriptionsList[index].customerId.toString().toUpperCase(),style: valuesTextStyle()), Text(prescriptionsList[index].pharmacyId.toString().toUpperCase(),style: valuesTextStyle()), ], ), ), Visibility( visible:true , child: prescriptionsList[index].status.toString().toLowerCase()=='pending'?Column( children: [ TextButton( child: Text( 'Accept', style: TextStyle( fontSize: 15, color: primaryColor /*FilteredList[index].text_color*/), ), onPressed: () async { var payload = new Map(); payload["pharmacyId"] =AppSettings.healthpharmaIdsign.toString(); payload["action"] = "accept"; bool requestStatus = await AppSettings.getRequestBiddingDetails( prescriptionsList[index].bookingId, payload); if (requestStatus) { // Navigator.of(context).pop(); AppSettings.longSuccessToast( "Booking Accepted"); await getAllPrescriptions(); } else {} }, ), TextButton( child: Text( 'Reject', style: TextStyle( fontSize: 15, color: primaryColor /*FilteredList[index].text_color*/), ), onPressed: () async { var payload = new Map(); payload["pharmacyId"] =AppSettings.healthpharmaIdsign.toString(); payload["action"] = "reject"; bool requestStatus = await AppSettings.getRequestBiddingDetails( prescriptionsList[index].bookingId, payload); if (requestStatus) { // Navigator.of(context).pop(); AppSettings.longSuccessToast( "Booking Rejected"); await getAllPrescriptions(); } else {} }, ), ], ):Text(prescriptionsList[index].status)), ], ), /*TextButton( child: const Text( 'Order Medicines', style: TextStyle(color: primaryColor), ), onPressed: () { Navigator.push( context, new MaterialPageRoute( builder: (__) => new OrderMedicines(prescriptionDetails:prescriptionsList[index]))); //signup screen }, )*/ ], ), ), ), ); }) ), ]); } else { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'No Bidding Requests Available', style: TextStyle(fontSize: 18), ), ], ), ); } } /**/ @override Widget build(BuildContext context) { return Scaffold( appBar: AppSettings.appBar('BiddingRequests'), body: isPrescriptionsDataLoading?Center( child: CircularProgressIndicator( color: primaryColor, strokeWidth: 5.0, ), ): _allPrescriptions(), ); } }