135 lines
4.0 KiB
Dart
135 lines
4.0 KiB
Dart
import 'package:SEFER/constant/colors.dart';
|
|
import 'package:SEFER/constant/style.dart';
|
|
import 'package:SEFER/controller/notification/ride_available_controller.dart';
|
|
import 'package:SEFER/views/widgets/my_scafold.dart';
|
|
import 'package:SEFER/views/widgets/mycircular.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
class AvailableRidesPage extends StatelessWidget {
|
|
const AvailableRidesPage({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
Get.put(RideAvailableController());
|
|
return GetBuilder<RideAvailableController>(
|
|
builder: (rideAvailableController) {
|
|
return MyScafolld(
|
|
title: 'Available for rides'.tr,
|
|
body: [
|
|
rideAvailableController.isLoading
|
|
? const MyCircularProgressIndicator()
|
|
: ListView.builder(
|
|
itemCount: rideAvailableController
|
|
.rideAvailableMap['message'].length,
|
|
itemBuilder: (context, index) => RideAvailableCard(
|
|
rideInfo: rideAvailableController
|
|
.rideAvailableMap['message'][index],
|
|
),
|
|
)
|
|
],
|
|
isleading: true);
|
|
});
|
|
}
|
|
}
|
|
|
|
class RideAvailableCard extends StatelessWidget {
|
|
final Map<String, dynamic> rideInfo;
|
|
|
|
const RideAvailableCard({Key? key, required this.rideInfo}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Card(
|
|
margin: const EdgeInsets.all(8.0),
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
|
|
elevation: 4,
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(16.0),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
// _buildLocationRow('🟢', rideInfo['startName']),
|
|
// const SizedBox(height: 8),
|
|
// _buildLocationRow('🔴', rideInfo['endName']),
|
|
_buildLocationRow('↑', rideInfo['startName'], AppColor.greenColor),
|
|
const SizedBox(height: 8),
|
|
_buildLocationRow('↓', rideInfo['endName'], Colors.red),
|
|
const SizedBox(height: 16),
|
|
_buildInfoRow(),
|
|
const SizedBox(height: 16),
|
|
_buildActionRow(),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _buildLocationRow(String icon, String location, Color iconColor) {
|
|
return Row(
|
|
children: [
|
|
Text(
|
|
icon,
|
|
style: TextStyle(
|
|
fontSize: 20, fontWeight: FontWeight.bold, color: iconColor),
|
|
),
|
|
const SizedBox(width: 8),
|
|
Expanded(
|
|
child: Text(
|
|
location,
|
|
style: AppStyle.subtitle,
|
|
maxLines: 2,
|
|
overflow: TextOverflow.ellipsis,
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
Widget _buildInfoRow() {
|
|
return Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text('${'Price:'.tr} ${rideInfo['price']} \$', style: AppStyle.title),
|
|
Text(
|
|
rideInfo['carType'],
|
|
style: AppStyle.title.copyWith(color: AppColor.greenColor),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
Widget _buildActionRow() {
|
|
return Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text('📈 ${rideInfo['passengerRate']}', style: AppStyle.title),
|
|
const SizedBox(height: 4),
|
|
Text(
|
|
'📍 ${rideInfo['distance']} ${'KM'.tr}',
|
|
style: AppStyle.title.copyWith(color: AppColor.greenColor),
|
|
),
|
|
],
|
|
),
|
|
ElevatedButton(
|
|
onPressed: () => _acceptRide(),
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: AppColor.greenColor,
|
|
shape:
|
|
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
|
),
|
|
child: Text('Accept'.tr),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
void _acceptRide() async {
|
|
// Your existing accept ride logic here
|
|
// ...
|
|
}
|
|
}
|