BUG: Bookmarked businesses data load

This commit is contained in:
2025-11-04 11:00:29 +02:00
parent 9cbdc849b1
commit 2a7e3e17ce
5 changed files with 46 additions and 49 deletions

View File

@@ -41,8 +41,6 @@ class _MihBusinessProfilePreviewState extends State<MihBusinessProfilePreview> {
@override
void initState() {
super.initState();
futureImageUrl =
MihFileApi.getMinioFileUrl(widget.business.logo_path, context);
}
@override
@@ -54,7 +52,8 @@ class _MihBusinessProfilePreviewState extends State<MihBusinessProfilePreview> {
return Row(
children: [
FutureBuilder(
future: futureImageUrl,
future: MihFileApi.getMinioFileUrl(
widget.business.logo_path, context),
builder: (context, asyncSnapshot) {
if (asyncSnapshot.connectionState == ConnectionState.done &&
asyncSnapshot.hasData) {

View File

@@ -10,7 +10,7 @@ class MzansiDirectoryProvider extends ChangeNotifier {
String userLocation;
bool personalSearch;
List<BookmarkedBusiness> bookmarkedBusinesses = [];
Map<String, Business?> businessDetailsMap = {};
List<Business> favouriteBusinessesList = [];
List<Business>? searchedBusinesses;
Business? selectedBusiness;
List<AppUser>? searchedUsers;
@@ -32,7 +32,6 @@ class MzansiDirectoryProvider extends ChangeNotifier {
userLocation = "Unknown Location";
personalSearch = true;
bookmarkedBusinesses = [];
businessDetailsMap = {};
searchedBusinesses = null;
selectedBusiness = null;
searchedUsers = null;
@@ -62,13 +61,14 @@ class MzansiDirectoryProvider extends ChangeNotifier {
notifyListeners();
}
void setFavouriteBusinesses({required List<BookmarkedBusiness> businesses}) {
void setBookmarkedeBusinesses(
{required List<BookmarkedBusiness> businesses}) {
bookmarkedBusinesses = businesses;
notifyListeners();
}
void setBusinessDetailsMap({required Map<String, Business?> detailsMap}) {
businessDetailsMap = detailsMap;
void setFavouriteBusinesses({required List<Business> businesses}) {
favouriteBusinessesList = businesses;
notifyListeners();
}

View File

@@ -1,13 +1,18 @@
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:go_router/go_router.dart';
import 'package:ken_logger/ken_logger.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_directory_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_favourite_businesses.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
import 'package:provider/provider.dart';
class MzansiDirectory extends StatefulWidget {
@@ -31,11 +36,33 @@ class _MzansiDirectoryState extends State<MzansiDirectory> {
});
}
Future<void> getFavouriteBusinesses() async {
MzansiDirectoryProvider directoryProvider =
context.read<MzansiDirectoryProvider>();
MzansiProfileProvider profileProvider =
context.read<MzansiProfileProvider>();
await MihMzansiDirectoryServices().getAllUserBookmarkedBusiness(
profileProvider.user!.app_id,
directoryProvider,
);
List<Business> favBus = [];
for (var bus in directoryProvider.bookmarkedBusinesses) {
await MihBusinessDetailsServices()
.getBusinessDetailsByBusinessId(bus.business_id)
.then((business) {
favBus.add(business!);
});
}
KenLogger.success(favBus);
directoryProvider.setFavouriteBusinesses(businesses: favBus);
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
initialiseGPSLocation();
getFavouriteBusinesses();
});
}

View File

@@ -1,5 +1,6 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:ken_logger/ken_logger.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
@@ -7,11 +8,8 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
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_providers/mzansi_directory_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_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';
import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
import 'package:provider/provider.dart';
class MihFavouriteBusinesses extends StatefulWidget {
@@ -31,39 +29,12 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
ValueNotifier([]);
Timer? _debounce;
Future<void> getAndMapAllBusinessDetailsForBookmarkedBusinesses(
MzansiProfileProvider mzansiProfileProvider,
MzansiDirectoryProvider directoryProvider,
) async {
await MihMzansiDirectoryServices().getAllUserBookmarkedBusiness(
mzansiProfileProvider.user!.app_id,
directoryProvider,
);
Map<String, Business?> businessMap = {};
List<Future<Business?>> detailFutures = [];
for (var item in directoryProvider.bookmarkedBusinesses) {
detailFutures.add(MihBusinessDetailsServices()
.getBusinessDetailsByBusinessId(item.business_id));
}
List<Business?> details = await Future.wait(detailFutures);
for (int i = 0; i < directoryProvider.bookmarkedBusinesses.length; i++) {
businessMap[directoryProvider.bookmarkedBusinesses[i].business_id] =
details[i];
}
directoryProvider.setBusinessDetailsMap(detailsMap: businessMap);
_filterAndSetBusinesses(directoryProvider);
}
void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) {
List<Business?> businessesToDisplay = [];
String query = businessSearchController.text.toLowerCase();
for (var bookmarked in directoryProvider.bookmarkedBusinesses) {
if (bookmarked.business_name.toLowerCase().contains(query)) {
if (directoryProvider.businessDetailsMap
.containsKey(bookmarked.business_id)) {
businessesToDisplay.add(
directoryProvider.businessDetailsMap[bookmarked.business_id]);
}
for (var bus in directoryProvider.favouriteBusinessesList) {
if (bus.Name.toLowerCase().contains(query)) {
businessesToDisplay.add(bus);
}
}
searchBookmarkedBusinesses.value = businessesToDisplay;
@@ -82,13 +53,11 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
super.initState();
MzansiDirectoryProvider directoryProvider =
context.read<MzansiDirectoryProvider>();
MzansiProfileProvider mzansiProfileProvider =
context.read<MzansiProfileProvider>();
getAndMapAllBusinessDetailsForBookmarkedBusinesses(
mzansiProfileProvider,
directoryProvider,
);
// getAndMapAllBusinessDetailsForBookmarkedBusinesses(
// mzansiProfileProvider,
// directoryProvider,
// );
_filterAndSetBusinesses(directoryProvider);
businessSearchController.addListener(() {
if (_debounce?.isActive ?? false) {
_debounce!.cancel();
@@ -214,6 +183,7 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
),
);
}
KenLogger.success(filteredBusinesses);
return BuildFavouriteBusinessesList(
favouriteBusinesses: filteredBusinesses,
);

View File

@@ -166,7 +166,8 @@ class MihMzansiDirectoryServices {
List<BookmarkedBusiness> favouriteBusinesses =
List<BookmarkedBusiness>.from(
l.map((model) => BookmarkedBusiness.fromJson(model)));
directoryProvider.setFavouriteBusinesses(businesses: favouriteBusinesses);
directoryProvider.setBookmarkedeBusinesses(
businesses: favouriteBusinesses);
return favouriteBusinesses;
} else if (response.statusCode == 404) {
return [];