diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-12-23 01:39:59 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-12-23 01:39:59 +0200 |
| commit | fbaae8f461ff085356670d41506cd92180227beb (patch) | |
| tree | a7a6b9c83f22961c1b4e5cea02841a2f58f81116 /mobile/lib/payement_order.dart | |
| parent | 776f680ca58d066e24284b009eb9a28ced03a6ea (diff) | |
| download | carpool-fbaae8f461ff085356670d41506cd92180227beb.tar.xz carpool-fbaae8f461ff085356670d41506cd92180227beb.zip | |
Final version
Diffstat (limited to 'mobile/lib/payement_order.dart')
| -rw-r--r-- | mobile/lib/payement_order.dart | 159 |
1 files changed, 100 insertions, 59 deletions
diff --git a/mobile/lib/payement_order.dart b/mobile/lib/payement_order.dart index eac05ec..19fa357 100644 --- a/mobile/lib/payement_order.dart +++ b/mobile/lib/payement_order.dart @@ -1,81 +1,122 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; import 'credit_card_payment.dart'; class Order { - final String orderID; - final String rideName; + final String pickUp; + final String dropOff; final String status; final double amount; - Order( - {required this.orderID, - required this.rideName, - required this.status, - required this.amount}); + Order({ + required this.pickUp, + required this.dropOff, + required this.status, + required this.amount, + }); } class PaymentOrderTrackingPage extends StatelessWidget { - final List<Order> orders = [ - Order( - orderID: '001', - rideName: 'Morning Ride - Gate 3 to Abdu-Basha', - status: 'Completed', - amount: 15.0), - Order( - orderID: '002', - rideName: 'Afternoon Ride - Abdu-Basha to Gate 3', - status: 'Pending', - amount: 12.5), - ]; + final FirebaseFirestore _firestore = FirebaseFirestore.instance; + final FirebaseAuth _auth = FirebaseAuth.instance; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('Payment & Order Tracking'), + title: const Text('Payment & Order Tracking'), ), - body: ListView.builder( - itemCount: orders.length, - itemBuilder: (BuildContext context, int index) { - final Order order = orders[index]; - return GestureDetector( - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - CreditCardDetailsPage(orderID: order.orderID), - ), - ); - }, - child: Card( - elevation: 3, - margin: EdgeInsets.symmetric(vertical: 8, horizontal: 16), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - child: ListTile( - title: Text( - 'Order ID: ${order.orderID}', - style: TextStyle( - fontWeight: FontWeight.bold, + body: FutureBuilder<List<Order>>( + future: _fetchOrders(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center(child: CircularProgressIndicator()); + } else if (snapshot.hasError) { + return Center(child: Text('Error: ${snapshot.error}')); + } else if (!snapshot.hasData || snapshot.data!.isEmpty) { + return Center(child: Text('No orders found.')); + } else { + return ListView.builder( + itemCount: snapshot.data!.length, + itemBuilder: (BuildContext context, int index) { + final Order order = snapshot.data![index]; + return GestureDetector( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + CreditCardDetailsPage(orderID: "13251231254"), + ), + ); + }, + child: Card( + elevation: 3, + margin: const EdgeInsets.symmetric( + vertical: 8, + horizontal: 16, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + child: ListTile( + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Ride: ${order.pickUp} - ${order.dropOff}', + style: const TextStyle(color: Colors.black), + ), + Text( + 'Status: ${order.status}', + style: const TextStyle(color: Colors.black), + ), + Text( + 'Amount: \$${order.amount.toStringAsFixed(2)}', + style: const TextStyle(color: Colors.black), + ), + ], + ), + leading: const Icon(Icons.payment), + ), ), - ), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text('Ride: ${order.rideName}'), - Text('Status: ${order.status}'), - Text('Amount: \$${order.amount.toStringAsFixed(2)}'), - ], - ), - leading: Icon(Icons - .payment), // TODO Use an appropriate icon for payment/order tracking - ), - ), - ); + ); + }, + ); + } }, ), ); } + + Future<List<Order>> _fetchOrders() async { + final currentUser = _auth.currentUser; + if (currentUser != null) { + final passengerID = currentUser.uid; + + QuerySnapshot rideRequests = await _firestore + .collection('RideRequest') + .where('passengerID', isEqualTo: passengerID) + .get(); + + List<Order> orders = []; + rideRequests.docs.forEach((doc) { + String pickUp = doc['pickUp']; + String dropOff = doc['dropOff']; + String status = doc['status']; + + Order order = Order( + pickUp: pickUp, + dropOff: dropOff, + status: status, + amount: 50, + ); + orders.add(order); + }); + return orders; + } else { + return []; + } + } } |
