import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:service/constant/colors.dart'; import 'package:service/constant/links.dart'; import 'package:service/controller/functions/crud.dart'; import 'package:service/controller/mainController/main_controller.dart'; import 'package:service/controller/mainController/pages/best_driver_page.dart'; import 'package:service/controller/mainController/pages/complaint.dart'; import 'package:service/controller/mainController/pages/edit_car_plate.dart'; import 'package:service/controller/mainController/pages/passengers_cant_regster.dart'; import 'package:service/views/widgets/elevated_btn.dart'; import 'package:service/views/widgets/my_dialog.dart'; import 'package:service/views/widgets/my_textField.dart'; import '../../constant/box_name.dart'; import '../../constant/style.dart'; import '../../controller/mainController/pages/add_car.dart'; import '../../controller/mainController/pages/drivers_cant_register.dart'; import '../../controller/mainController/pages/new_driver.dart'; import '../../controller/mainController/pages/welcome_call.dart'; import '../../main.dart'; import '../../print.dart'; import '../widgets/my_scafold.dart'; // --- Service Item Model --- // A helper class to structure the data for each service card. // This makes the code cleaner and easier to manage. class ServiceItem { final String title; final IconData icon; final VoidCallback onTap; ServiceItem({required this.title, required this.icon, required this.onTap}); } // --- Main Screen Widget (Redesigned) --- class Main extends StatelessWidget { Main({super.key}); final MainController mainController = Get.put(MainController()); @override Widget build(BuildContext context) { // --- List of Services --- // All services are defined here in a list. This makes it easy to add, remove, or reorder them. // The original onTap logic is preserved exactly as it was. final List services = [ ServiceItem( title: 'passenger details by phone'.tr, icon: Icons.person_search_rounded, onTap: () { MyDialog().getDialog( 'insert passenger phone'.tr, 'midTitle', Column(children: [ Form( key: mainController.formKey, child: MyTextForm( controller: mainController.passengerPhoneController, label: 'insert passenger phone'.tr, hint: 'insert passenger phone'.tr, type: TextInputType.phone, ), ), ]), () => mainController.searchPassengerByPhone(), ); }, ), ServiceItem( title: 'Driver details by phone'.tr, icon: Icons.support_agent_rounded, onTap: () { MyDialog().getDialog( 'insert Driver phone'.tr, 'midTitle', Column(children: [ Form( key: mainController.formKey, child: MyTextForm( controller: mainController.driverPhoneController, label: 'insert Driver phone'.tr, hint: 'insert Driver phone'.tr, type: TextInputType.phone, ), ), ]), () => mainController.searchDriverByPhone(), ); }, ), ServiceItem( title: 'Driver details by national number'.tr, icon: Icons.support_agent_rounded, onTap: () { MyDialog().getDialog( 'insert Driver national'.tr, 'midTitle', Column(children: [ Form( key: mainController.formKey, child: MyTextForm( controller: mainController.driverPhoneController, label: 'insert Driver national'.tr, hint: 'insert Driver national'.tr, type: TextInputType.number, ), ), ]), () => mainController.searchDriverByNational(), ); }, ), ServiceItem( title: 'Drivers waitting Register'.tr, icon: Icons.pending_actions_rounded, onTap: () async { await mainController.getDriverWantCompleteRegistration(); Get.to(() => DriversCantRegister()); }, ), ServiceItem( title: 'Register new driver'.tr, icon: Icons.person, onTap: () { // await mainController.getDriverWantCompleteRegistration(); Get.to(() => RegisterCaptain()); }, ), ServiceItem( title: 'Drivers Cant Register'.tr, icon: Icons.car_crash, onTap: () async { await mainController.getDriverNotCompleteRegistration(); Get.to(() => DriversCantRegister()); }, ), ServiceItem( title: 'Drivers phones not register'.tr, icon: Icons.person, onTap: () async { await mainController.getDriversPhoneNotComplete(); Get.to(() => DriversCantRegister()); }, ), ServiceItem( title: 'Drivers Activity'.tr, icon: Icons.person, onTap: () async { await mainController.getDriversPhoneNotComplete(); Get.to(() => DriversCantRegister()); }, ), ServiceItem( title: 'Passengers Cant Register'.tr, icon: Icons.group_off_rounded, onTap: () async { await mainController.getPassengerNotCompleteRegistration(); Get.to(() => PassengersCantRegister()); }, ), ServiceItem( title: 'Add car'.tr, icon: Icons.add_circle_outline_rounded, onTap: () async { await mainController.getdriverWithoutCar(); if (mainController.driverWithoutCar.isNotEmpty) { Get.to(() => const AddCar()); } }, ), ServiceItem( title: 'Edit car plate'.tr, icon: Icons.edit_note_rounded, onTap: () async { await mainController.getCarPlateNotEdit(); if (mainController.carPlateNotEdit.isNotEmpty) { Get.to(() => const EditCarPlate()); } }, ), ServiceItem( title: "View complaint".tr, icon: Icons.report_problem_rounded, onTap: () { Get.to(() => const Complaint()); }, ), ServiceItem( title: "Welcome call".tr, icon: Icons.ring_volume_rounded, onTap: () async { await mainController.getNewDriverRegister(); Get.to(() => const WelcomeCall()); }, ), ServiceItem( title: "best driver".tr, icon: Icons.emoji_events_rounded, onTap: () async { await mainController.getNewDriverRegister(); Get.to(() => DriverTheBest()); }, ), ServiceItem( title: "Add Driver Who Wants to Work".tr, icon: Icons.person_add_alt_1_rounded, onTap: () { Get.defaultDialog( barrierDismissible: false, title: "Add Driver Who Wants to Work".tr, content: SizedBox( width: Get.width * .7, height: 300, child: Form( key: mainController.formKey, child: ListView( children: [ MyTextForm( controller: mainController.driverNameController, label: 'Insert Name of Driver'.tr, hint: 'Insert Name of Driver'.tr, type: TextInputType.name), MyTextForm( controller: mainController.nationalIdController, label: 'Insert national ID of Driver'.tr, hint: 'Insert national ID of Driver'.tr, type: TextInputType.number), MyTextForm( controller: mainController.phoneController, label: 'Insert phone of Driver'.tr, hint: 'Insert phone of Driver'.tr, type: TextInputType.phone), MyTextForm( controller: mainController.licenseTypeController, label: 'Insert license type of Driver'.tr, hint: 'Insert license type of Driver'.tr, type: TextInputType.name), MyTextForm( controller: mainController.siteDriverController, label: 'Insert site of Driver'.tr, hint: 'Insert site of Driver'.tr, type: TextInputType.name), MyTextForm( controller: mainController.birthDateController, label: 'Insert birth_date of Driver'.tr, hint: 'Insert license type of Driver'.tr, type: TextInputType.number), ], )), ), confirm: MyElevatedButton( title: 'Add'.tr, onPressed: () async { // if (mainController.formKey.currentState!.validate()) { var res = await CRUD() .post(link: AppLink.addDriverWantWork, payload: { "driver_name": mainController.driverNameController.text, "national_id": mainController.nationalIdController.text, "birth_date": mainController.birthDateController.text, "site": mainController.siteDriverController.text, "license_type": mainController.licenseTypeController.text, "phone": mainController.phoneController.text, }); if (res != 'failure') { Get.back(); mainController.driverNameController.clear(); mainController.nationalIdController.clear(); mainController.birthDateController.clear(); mainController.licenseTypeController.clear(); mainController.siteDriverController.clear(); mainController.phoneController.clear(); Get.snackbar('done', '', backgroundColor: AppColor.greenColor); } // } }, kolor: AppColor.greenColor, ), cancel: MyElevatedButton( title: 'Cancel'.tr, kolor: AppColor.redColor, onPressed: () { Get.back(); }), ); }, ), ServiceItem( title: "Add Car Who Wants to Work".tr, icon: Icons.directions_car_filled_rounded, onTap: () { Get.defaultDialog( barrierDismissible: false, title: "Add Car Who Wants to Work".tr, content: SizedBox( width: Get.width * .7, height: 300, child: Form( key: mainController.formKey, child: ListView( children: [ MyTextForm( controller: mainController.carOwnerWorkController, label: 'Insert Name of Owner'.tr, hint: 'Insert Name of Owner'.tr, type: TextInputType.name), MyTextForm( controller: mainController.carNumberController, label: 'Insert car_number of Driver'.tr, hint: 'Insert car_number of Driver'.tr, type: TextInputType.name), MyTextForm( controller: mainController.phoneCarController, label: 'Insert phone of Owner'.tr, hint: 'Insert phone of Owner'.tr, type: TextInputType.phone), MyTextForm( controller: mainController.manufactureYearController, label: 'Insert year of Car'.tr, hint: 'Insert year of Car'.tr, type: TextInputType.number), MyTextForm( controller: mainController.carModelController, label: 'Insert car_model of Driver'.tr, hint: 'Insert car_model of Driver'.tr, type: TextInputType.name), MyTextForm( controller: mainController.siteCarController, label: 'Insert site of Owner'.tr, hint: 'Insert site of Owner'.tr, type: TextInputType.name), MyTextForm( controller: mainController.carTypeController, label: 'Insert car_type of Driver'.tr, hint: 'Insert car_type of Driver'.tr, type: TextInputType.name), MyTextForm( controller: mainController.registrationDateController, label: 'Insert registration_date of Car'.tr, hint: 'Insert registration_date of Car'.tr, type: TextInputType.datetime), ], )), ), confirm: MyElevatedButton( title: 'Add'.tr, onPressed: () async { // if (mainController.formKey.currentState!.validate()) { var res = await CRUD().post(link: AppLink.addCarWantWork, payload: { "owner_name": mainController.carOwnerWorkController.text, "car_number": mainController.carNumberController.text, "manufacture_year": mainController.manufactureYearController.text, "car_model": mainController.carModelController.text, "car_type": mainController.carTypeController.text, "site": mainController.siteCarController.text, "registration_date": mainController.registrationDateController.text, "phone": mainController.phoneCarController.text, }); Log.print('res: ${res}'); if (res != 'failure') { Get.back(); mainController.ownerController.clear(); mainController.carNumberController.clear(); mainController.manufactureYearController.clear(); mainController.carModelController.clear(); mainController.siteCarController.clear(); mainController.carTypeController.clear(); mainController.registrationDateController.clear(); mainController.phoneController.clear(); Get.snackbar('done', '', backgroundColor: AppColor.greenColor); } // } }, kolor: AppColor.greenColor, ), cancel: MyElevatedButton( title: 'Cancel'.tr, kolor: AppColor.redColor, onPressed: () { Get.back(); }), ); }, ), ]; // --- Building the UI --- return MyScaffold( title: 'Intaleq Service'.tr, isleading: false, action: MyElevatedButton( title: 'Logout'.tr, onPressed: () async { // box.write(BoxName.employeename, 'masa'); print(box.read(BoxName.employeename).toString()); }, kolor: AppColor.redColor, ), // The body now uses a GridView for a better layout. // You can replace the color with your main theme color. // backgroundColor: const Color(0xFFF5F7FA), body: [ GridView.builder( padding: const EdgeInsets.all(16.0), itemCount: services.length, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, // Two columns crossAxisSpacing: 16.0, // Horizontal space between cards mainAxisSpacing: 16.0, // Vertical space between cards childAspectRatio: 1.1, // Adjust card shape (width/height ratio) ), itemBuilder: (context, index) { final service = services[index]; return ServiceCard( title: service.title, icon: service.icon, onTap: service.onTap, ); }, ), ], ); } } // --- Service Card Widget --- // A reusable widget for displaying each service. class ServiceCard extends StatelessWidget { final String title; final IconData icon; final VoidCallback onTap; const ServiceCard({ super.key, required this.title, required this.icon, required this.onTap, }); @override Widget build(BuildContext context) { return InkWell( onTap: onTap, borderRadius: BorderRadius.circular(16.0), child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16.0), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.15), spreadRadius: 2, blurRadius: 8, offset: const Offset(0, 4), // changes position of shadow ), ], ), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ // Icon Icon( icon, size: 48.0, // You can replace this color with your AppStyle color color: Theme.of(context).primaryColor, ), const SizedBox(height: 12), // Title Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: Text( title, textAlign: TextAlign.center, style: const TextStyle( fontWeight: FontWeight.w600, fontSize: 14, // You can replace this color with your AppStyle color color: Color(0xFF4A4A4A), ), maxLines: 2, overflow: TextOverflow.ellipsis, ), ), ], ), ), ); } }