diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 01e218b..f6118da 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ package="com.cloud.solutions.mowater.ksa.customer"> + diff --git a/lib/main.dart b/lib/main.dart index 685d69f..6356eca 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -49,12 +49,13 @@ Future main() async { await EasyLocalization.ensureInitialized(); if (Platform.isAndroid) { await Firebase.initializeApp( - options: const FirebaseOptions( - apiKey: 'AIzaSyD1WNNGrbBiCNvCrI31d3DV5AOgToq-Lus', - appId: '1:294636898500:android:e93b7e5d1cc15ae6b0e191', - messagingSenderId: '294636898500', - projectId: 'mowater-2c81a', - )); + options: const FirebaseOptions( + apiKey: 'AIzaSyD1WNNGrbBiCNvCrI31d3DV5AOgToq-Lus', + appId: '1:294636898500:android:e93b7e5d1cc15ae6b0e191', + messagingSenderId: '294636898500', + projectId: 'mowater-2c81a', + ), + ); } else { await Firebase.initializeApp(); } diff --git a/lib/views/dashboard/fragments/branches_fragment.dart b/lib/views/dashboard/fragments/branches_fragment.dart index e993d2e..05b23dd 100644 --- a/lib/views/dashboard/fragments/branches_fragment.dart +++ b/lib/views/dashboard/fragments/branches_fragment.dart @@ -56,6 +56,7 @@ class BranchesFragment extends StatelessWidget { FiltersList( filterList: appointmentsVM.branchesCategoriesFilterOptions, onFilterTapped: (index, selectedFilterId) => appointmentsVM.applyFilterOnBranches(index: index), + scrollController: appointmentsVM.branchesFilterScrollController, ), ], 16.height, diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart index c099245..c6d3c6a 100644 --- a/lib/views/dashboard/fragments/home_fragment.dart +++ b/lib/views/dashboard/fragments/home_fragment.dart @@ -2,6 +2,7 @@ import 'package:car_customer_app/views/dashboard/widgets/drawer_widget.dart'; import 'package:car_customer_app/views/dashboard/widgets/my_services_categories_widget.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; @@ -58,6 +59,25 @@ class _HomeFragmentState extends State { }).toList(); } + List _addSpecialRequestsService(List services) { + // Create Special Requests service at index 0 + final specialRequestsService = FilterListModel( + id: -1, + // Special ID to identify this custom service + title: LocaleKeys.specialRequests.tr(), + titleN: LocaleKeys.specialRequests.tr(), + iconUrl: MyAssets.icRequests, + // Same icon as bottom navbar + description: '', + descriptionN: '', + isCustom: false, + isSelected: false, + ); + + // Insert at index 0 + return [specialRequestsService, ...services]; + } + Widget _buildServicesHeader() { if (_isSearchingServices) { return Padding( @@ -207,8 +227,11 @@ class _HomeFragmentState extends State { } // Show actual data when services are available if (appointmentVM.branchesCategoriesFilterOptions.isNotEmpty) { + // Add Special Requests service at index 0 + final servicesWithSpecialRequests = _addSpecialRequestsService(appointmentVM.branchesCategoriesFilterOptions); + // Filter services based on search query - final filteredServices = _filterServices(appointmentVM.branchesCategoriesFilterOptions); + final filteredServices = _filterServices(servicesWithSpecialRequests); return Column( children: [ diff --git a/lib/views/dashboard/widgets/my_services_categories_widget.dart b/lib/views/dashboard/widgets/my_services_categories_widget.dart index f9de4a2..74ea393 100644 --- a/lib/views/dashboard/widgets/my_services_categories_widget.dart +++ b/lib/views/dashboard/widgets/my_services_categories_widget.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; @@ -60,7 +61,11 @@ class MyServicesCategoriesWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ - category.isCustom ? category.iconUrl.buildNetworkImage(height: 32, width: 32, fit: BoxFit.fill) : category.iconUrl.buildNetworkImage(height: 32, width: 32, fit: BoxFit.fill), + // Special handling for Special Requests service (displays local SVG icon) + if (category.id == -1) + SvgPicture.asset(category.iconUrl, height: 32, width: 32, fit: BoxFit.fill) + else + category.iconUrl.buildNetworkImage(height: 32, width: 32, fit: BoxFit.fill), 10.height, Flexible( child: (isArabic ? category.titleN : category.title).toText( @@ -91,13 +96,20 @@ class MyServicesCategoriesWidget extends StatelessWidget { ], ), ).onPress(() { - final appointmentVM = context.read(); final dashboardCustomerVM = context.read(); - context.read().onNavbarTapped(0); - dashboardCustomerVM.onNavbarTapped(0); - // Use the original index from homeCategories for filtering - int originalIndex = homeCategories.indexOf(category); - appointmentVM.applyFilterOnBranches(index: originalIndex); + + // Check if this is the Special Requests service + if (category.id == -1) { + // Navigate to Requests tab (index 4) + dashboardCustomerVM.onNavbarTapped(4); + } else { + // Original behavior for other services + final appointmentVM = context.read(); + dashboardCustomerVM.onNavbarTapped(0); + // Adjust index: subtract 1 because Special Requests was added at index 0 + int originalIndex = homeCategories.indexOf(category) - 1; + appointmentVM.applyFilterOnBranches(index: originalIndex); + } }); }, );