import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../constant/colors.dart'; import '../../constant/style.dart'; import '../../controller/transit/transit_driver_controller.dart'; import '../widgets/elevated_btn.dart'; import '../widgets/error_snakbar.dart'; class ManualBoardingPage extends StatefulWidget { final int stopId; final String stopName; const ManualBoardingPage({super.key, required this.stopId, required this.stopName}); @override State createState() => _ManualBoardingPageState(); } class _ManualBoardingPageState extends State { bool isLoading = true; List> passengers = []; @override void initState() { super.initState(); _loadPassengers(); } Future _loadPassengers() async { final c = Get.find(); // For now, this is a placeholder. You'll need to add getStopPassengers in the controller. final result = await c.getStopPassengers(widget.stopId); if (mounted) { setState(() { passengers = result; isLoading = false; }); } } void _markBoarded(int index) async { final c = Get.find(); final pId = passengers[index]['passenger_id']?.toString() ?? ''; if (pId.isEmpty) return; final success = await c.boardPassenger(widget.stopId, pId); if (success && mounted) { setState(() { passengers[index]['is_boarded'] = true; }); mySnackbarSuccess('تم تسجيل حضور الراكب'.tr); } else { mySnackbarError('فشل تسجيل الحضور'.tr); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColor.secondaryColor, appBar: AppBar( title: Text('${'Manual List'.tr} - ${widget.stopName}', style: AppStyle.headTitle2.copyWith(color: AppColor.writeColor)), backgroundColor: AppColor.secondaryColor, elevation: 0, iconTheme: IconThemeData(color: AppColor.writeColor), ), body: isLoading ? const Center(child: CircularProgressIndicator()) : passengers.isEmpty ? Center(child: Text('لا يوجد ركاب مسجلين في هذه المحطة'.tr)) : ListView.builder( padding: const EdgeInsets.all(16), itemCount: passengers.length, itemBuilder: (context, index) { final p = passengers[index]; final isBoarded = p['is_boarded'] == true; return Container( margin: const EdgeInsets.only(bottom: 12), decoration: BoxDecoration( color: AppColor.cardColor, borderRadius: BorderRadius.circular(14), boxShadow: [ BoxShadow(color: Colors.black.withOpacity(0.04), blurRadius: 10, offset: const Offset(0, 2)) ], ), child: ListTile( contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), leading: CircleAvatar( backgroundColor: isBoarded ? AppColor.greenColor.withOpacity(0.2) : AppColor.grayColor.withOpacity(0.2), child: Icon(Icons.person, color: isBoarded ? AppColor.greenColor : AppColor.grayColor), ), title: Text(p['name'] ?? 'Unknown', style: AppStyle.title.copyWith(fontWeight: FontWeight.bold)), subtitle: Text('ID: ${p['student_id'] ?? p['passenger_id']}', style: AppStyle.subtitle.copyWith(color: AppColor.grayColor)), trailing: isBoarded ? const Icon(Icons.check_circle, color: AppColor.greenColor, size: 28) : SizedBox( width: 80, height: 35, child: MyElevatedButton( title: 'حاضر'.tr, kolor: AppColor.accentColor, onPressed: () => _markBoarded(index), ), ), ), ); }, ), ); } }