diff --git a/Frontend/lib/mih_components/mih_providers/mzansi_directory_provider.dart b/Frontend/lib/mih_components/mih_providers/mzansi_directory_provider.dart index dc1f7db2..ef05f620 100644 --- a/Frontend/lib/mih_components/mih_providers/mzansi_directory_provider.dart +++ b/Frontend/lib/mih_components/mih_providers/mzansi_directory_provider.dart @@ -10,7 +10,7 @@ class MzansiDirectoryProvider extends ChangeNotifier { String userLocation; bool personalSearch; List bookmarkedBusinesses = []; - List favouriteBusinessesList = []; + List? favouriteBusinessesList; List? searchedBusinesses; Business? selectedBusiness; List? searchedUsers; diff --git a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart index 55ac3cd5..ffc1646b 100644 --- a/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart +++ b/Frontend/lib/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart @@ -7,6 +7,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart'; @@ -32,9 +33,11 @@ class _MihFavouriteBusinessesState extends State { void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) { List businessesToDisplay = []; String query = businessSearchController.text.toLowerCase(); - for (var bus in directoryProvider.favouriteBusinessesList) { - if (bus.Name.toLowerCase().contains(query)) { - businessesToDisplay.add(bus); + if (directoryProvider.favouriteBusinessesList != null) { + for (var bus in directoryProvider.favouriteBusinessesList!) { + if (bus.Name.toLowerCase().contains(query)) { + businessesToDisplay.add(bus); + } } } searchBookmarkedBusinesses.value = businessesToDisplay; @@ -79,117 +82,129 @@ class _MihFavouriteBusinessesState extends State { } Widget getBody(double width) { - return MihSingleChildScroll( - child: Column( - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: width / 20), - child: MihSearchBar( - controller: businessSearchController, - hintText: "Search Businesses", - prefixIcon: Icons.search, - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - hintColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - onPrefixIconTap: () {}, - searchFocusNode: searchFocusNode, - ), - ), - const SizedBox(height: 10), - ValueListenableBuilder>( - valueListenable: searchBookmarkedBusinesses, - builder: (context, filteredBusinesses, child) { - if (filteredBusinesses.isEmpty && - businessSearchController.text.isNotEmpty) { - return Column( - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.iDontKnow, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(height: 10), - Text( - "Let's try refining your search", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - ], - ); - } else if (filteredBusinesses.isEmpty && - businessSearchController.text.isEmpty) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 50), - Icon( - MihIcons.businessProfile, - size: 165, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - const SizedBox(height: 10), - Text( - "No favourite businesses added to your mzansi directory", - textAlign: TextAlign.center, - overflow: TextOverflow.visible, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, + return Consumer( + builder: (BuildContext context, MzansiDirectoryProvider directoryProvider, + Widget? child) { + if (directoryProvider.favouriteBusinessesList == null) { + return Center( + child: Mihloadingcircle(), + ); + } + return MihSingleChildScroll( + child: Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: width / 20), + child: MihSearchBar( + controller: businessSearchController, + hintText: "Search Businesses", + prefixIcon: Icons.search, + fillColor: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + hintColor: MihColors.getPrimaryColor( + MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + onPrefixIconTap: () {}, + searchFocusNode: searchFocusNode, + ), + ), + const SizedBox(height: 10), + ValueListenableBuilder>( + valueListenable: searchBookmarkedBusinesses, + builder: (context, filteredBusinesses, child) { + if (filteredBusinesses.isEmpty && + businessSearchController.text.isNotEmpty) { + return Column( + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.iDontKnow, + size: 165, color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), ), - ), - const SizedBox(height: 25), - Center( - child: RichText( + const SizedBox(height: 10), + Text( + "Let's try refining your search", textAlign: TextAlign.center, - text: TextSpan( + overflow: TextOverflow.visible, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + ), + ], + ); + } else if (filteredBusinesses.isEmpty && + businessSearchController.text.isEmpty) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 50), + Icon( + MihIcons.businessProfile, + size: 165, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), + const SizedBox(height: 10), + Text( + "No favourite businesses added to your mzansi directory", + textAlign: TextAlign.center, + overflow: TextOverflow.visible, style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.normal, + fontSize: 25, + fontWeight: FontWeight.bold, color: MihColors.getSecondaryColor( MzansiInnovationHub.of(context)! .theme .mode == "Dark"), ), - children: [ - TextSpan(text: "Use the mzansi search"), - TextSpan( - text: - " to find your favourite businesses of mzansi"), - ], ), - ), + const SizedBox(height: 25), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.normal, + color: MihColors.getSecondaryColor( + MzansiInnovationHub.of(context)! + .theme + .mode == + "Dark"), + ), + children: [ + TextSpan(text: "Use the mzansi search"), + TextSpan( + text: + " to find your favourite businesses of mzansi"), + ], + ), + ), + ), + ], ), - ], - ), - ); - } - KenLogger.success(filteredBusinesses); - return BuildFavouriteBusinessesList( - favouriteBusinesses: filteredBusinesses, - ); - }), - ], - ), + ); + } + KenLogger.success(filteredBusinesses); + return BuildFavouriteBusinessesList( + favouriteBusinesses: filteredBusinesses, + ); + }), + ], + ), + ); + }, ); } }