favourite business fix

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

View File

@@ -10,7 +10,7 @@ class MzansiDirectoryProvider extends ChangeNotifier {
String userLocation;
bool personalSearch;
List<BookmarkedBusiness> bookmarkedBusinesses = [];
List<Business> favouriteBusinessesList = [];
List<Business>? favouriteBusinessesList;
List<Business>? searchedBusinesses;
Business? selectedBusiness;
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_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<MihFavouriteBusinesses> {
void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) {
List<Business?> 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<MihFavouriteBusinesses> {
}
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<List<Business?>>(
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<MzansiDirectoryProvider>(
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<List<Business?>>(
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,
);
}),
],
),
);
},
);
}
}