favourite business fix

This commit is contained in:
2025-11-04 12:07:00 +02:00
parent 22ae804c2d
commit 5289cf8511
2 changed files with 116 additions and 101 deletions

View File

@@ -10,7 +10,7 @@ class MzansiDirectoryProvider extends ChangeNotifier {
String userLocation; String userLocation;
bool personalSearch; bool personalSearch;
List<BookmarkedBusiness> bookmarkedBusinesses = []; List<BookmarkedBusiness> bookmarkedBusinesses = [];
List<Business> favouriteBusinessesList = []; List<Business>? favouriteBusinessesList;
List<Business>? searchedBusinesses; List<Business>? searchedBusinesses;
Business? selectedBusiness; Business? selectedBusiness;
List<AppUser>? searchedUsers; List<AppUser>? searchedUsers;

View File

@@ -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_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_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_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_components/mih_providers/mzansi_directory_provider.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.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'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_favourite_businesses_list.dart';
@@ -32,9 +33,11 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) { void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) {
List<Business?> businessesToDisplay = []; List<Business?> businessesToDisplay = [];
String query = businessSearchController.text.toLowerCase(); String query = businessSearchController.text.toLowerCase();
for (var bus in directoryProvider.favouriteBusinessesList) { if (directoryProvider.favouriteBusinessesList != null) {
if (bus.Name.toLowerCase().contains(query)) { for (var bus in directoryProvider.favouriteBusinessesList!) {
businessesToDisplay.add(bus); if (bus.Name.toLowerCase().contains(query)) {
businessesToDisplay.add(bus);
}
} }
} }
searchBookmarkedBusinesses.value = businessesToDisplay; searchBookmarkedBusinesses.value = businessesToDisplay;
@@ -79,117 +82,129 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
} }
Widget getBody(double width) { Widget getBody(double width) {
return MihSingleChildScroll( return Consumer<MzansiDirectoryProvider>(
child: Column( builder: (BuildContext context, MzansiDirectoryProvider directoryProvider,
children: [ Widget? child) {
Padding( if (directoryProvider.favouriteBusinessesList == null) {
padding: EdgeInsets.symmetric(horizontal: width / 20), return Center(
child: MihSearchBar( child: Mihloadingcircle(),
controller: businessSearchController, );
hintText: "Search Businesses", }
prefixIcon: Icons.search, return MihSingleChildScroll(
fillColor: MihColors.getSecondaryColor( child: Column(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), children: [
hintColor: MihColors.getPrimaryColor( Padding(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), padding: EdgeInsets.symmetric(horizontal: width / 20),
onPrefixIconTap: () {}, child: MihSearchBar(
searchFocusNode: searchFocusNode, controller: businessSearchController,
), hintText: "Search Businesses",
), prefixIcon: Icons.search,
const SizedBox(height: 10), fillColor: MihColors.getSecondaryColor(
ValueListenableBuilder<List<Business?>>( MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
valueListenable: searchBookmarkedBusinesses, hintColor: MihColors.getPrimaryColor(
builder: (context, filteredBusinesses, child) { MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
if (filteredBusinesses.isEmpty && onPrefixIconTap: () {},
businessSearchController.text.isNotEmpty) { searchFocusNode: searchFocusNode,
return Column( ),
children: [ ),
const SizedBox(height: 50), const SizedBox(height: 10),
Icon( ValueListenableBuilder<List<Business?>>(
MihIcons.iDontKnow, valueListenable: searchBookmarkedBusinesses,
size: 165, builder: (context, filteredBusinesses, child) {
color: MihColors.getSecondaryColor( if (filteredBusinesses.isEmpty &&
MzansiInnovationHub.of(context)!.theme.mode == businessSearchController.text.isNotEmpty) {
"Dark"), return Column(
), children: [
const SizedBox(height: 10), const SizedBox(height: 50),
Text( Icon(
"Let's try refining your search", MihIcons.iDontKnow,
textAlign: TextAlign.center, size: 165,
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,
color: MihColors.getSecondaryColor( color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"), "Dark"),
), ),
), const SizedBox(height: 10),
const SizedBox(height: 25), Text(
Center( "Let's try refining your search",
child: RichText(
textAlign: TextAlign.center, 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( style: TextStyle(
fontSize: 20, fontSize: 25,
fontWeight: FontWeight.normal, fontWeight: FontWeight.bold,
color: MihColors.getSecondaryColor( color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)! MzansiInnovationHub.of(context)!
.theme .theme
.mode == .mode ==
"Dark"), "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(
KenLogger.success(filteredBusinesses); favouriteBusinesses: filteredBusinesses,
return BuildFavouriteBusinessesList( );
favouriteBusinesses: filteredBusinesses, }),
); ],
}), ),
], );
), },
); );
} }
} }