QOL: Data display load Mzansi Direct pt4

This commit is contained in:
2025-12-03 11:16:24 +02:00
parent 3ff670886c
commit 0a9f0c000e
4 changed files with 29 additions and 110 deletions

View File

@@ -1,7 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_action.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_package_tools.dart';
@@ -10,11 +9,8 @@ import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.da
import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; import 'package:mzansi_innovation_hub/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_favourite_businesses.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/package_tools/mih_search_mzansi.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_data_helper_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_data_helper_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_location_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'; import 'package:provider/provider.dart';
class MzansiDirectory extends StatefulWidget { class MzansiDirectory extends StatefulWidget {
@@ -42,7 +38,6 @@ class _MzansiDirectoryState extends State<MzansiDirectory> {
await MihDataHelperServices().loadUserDataOnly( await MihDataHelperServices().loadUserDataOnly(
mzansiProfileProvider, mzansiProfileProvider,
); );
// await getFavouriteBusinesses();
setState(() { setState(() {
_isLoadingInitialData = false; _isLoadingInitialData = false;
}); });
@@ -56,86 +51,6 @@ class _MzansiDirectoryState extends State<MzansiDirectory> {
directoryProvider.setUserPosition(userPos); directoryProvider.setUserPosition(userPos);
} }
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 = [];
// Map<String, ImageProvider<Object>?> favBusImages = {};
Map<String, Future<String>> favBusImages = {};
// String businessLogoUrl = "";
Future<String> businessLogoUrl;
for (var bus in directoryProvider.bookmarkedBusinesses) {
await MihBusinessDetailsServices()
.getBusinessDetailsByBusinessId(bus.business_id)
.then((business) async {
favBus.add(business!);
businessLogoUrl = MihFileApi.getMinioFileUrl(business.logo_path);
favBusImages[business.business_id] = businessLogoUrl;
// != ""
// ? CachedNetworkImageProvider(businessLogoUrl)
// : null;
});
}
directoryProvider.setFavouriteBusinesses(
businesses: favBus,
businessesImagesUrl: favBusImages,
);
}
// // --- REVISED FUNCTION FOR PARALLEL FETCHING ---
// Future<void> getFavouriteBusinesses() async {
// MzansiDirectoryProvider directoryProvider =
// context.read<MzansiDirectoryProvider>();
// MzansiProfileProvider profileProvider =
// context.read<MzansiProfileProvider>();
// // 1. Fetch the list of bookmarked business IDs
// await MihMzansiDirectoryServices().getAllUserBookmarkedBusiness(
// profileProvider.user!.app_id,
// directoryProvider,
// );
// // 2. Map bookmarked businesses to a list of Futures
// // Each Future will fetch the business details AND the logo URL concurrently
// final List<Future<(Business?, String?)>> detailAndUrlFutures =
// directoryProvider.bookmarkedBusinesses.map((bookmarkedBus) {
// return MihBusinessDetailsServices()
// .getBusinessDetailsByBusinessId(bookmarkedBus.business_id)
// .then((business) async {
// if (business == null) return (null, null);
// // Fetch logo URL for this business concurrently
// String businessLogoUrl =
// await MihFileApi.getMinioFileUrl(business.logo_path);
// return (business, businessLogoUrl);
// });
// }).toList();
// // 3. Wait for ALL futures to complete in parallel
// List<(Business?, String?)> results = await Future.wait(detailAndUrlFutures);
// // 4. Process the results
// List<Business> favBus = [];
// Map<String, ImageProvider<Object>?> favBusImages = {};
// for (var result in results) {
// final business = result.$1;
// final businessLogoUrl = result.$2;
// if (business != null) {
// favBus.add(business);
// favBusImages[business.business_id] =
// (businessLogoUrl != null && businessLogoUrl.isNotEmpty)
// ? NetworkImage(businessLogoUrl)
// : null;
// }
// }
// // 5. Update the provider once with all the data
// directoryProvider.setFavouriteBusinesses(
// businesses: favBus,
// businessesImages: favBusImages,
// );
// }
// // ---------------------------------------------
@override @override
void initState() { void initState() {
super.initState(); super.initState();

View File

@@ -41,7 +41,6 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
profileProvider.user!.app_id, profileProvider.user!.app_id,
directoryProvider, directoryProvider,
); );
}
List<Business> favBus = []; List<Business> favBus = [];
// Map<String, ImageProvider<Object>?> favBusImages = {}; // Map<String, ImageProvider<Object>?> favBusImages = {};
Map<String, Future<String>> favBusImages = {}; Map<String, Future<String>> favBusImages = {};
@@ -62,6 +61,7 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
businessesImagesUrl: favBusImages, businessesImagesUrl: favBusImages,
); );
} }
}
void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) { void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) {
List<Business?> businessesToDisplay = []; List<Business?> businessesToDisplay = [];

View File

@@ -125,19 +125,21 @@ class _MihAddBookmarkAlertState extends State<MihAddBookmarkAlert> {
fullscreen: false, fullscreen: false,
windowTitle: null, windowTitle: null,
onWindowTapClose: null, onWindowTapClose: null,
backgroundColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
windowBody: Column( windowBody: Column(
children: [ children: [
Icon( Icon(
Icons.warning_rounded, Icons.warning_rounded,
size: 150, size: 150,
color: MihColors.getSecondaryColor( color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
), ),
Text( Text(
"Bookmark Business", "Bookmark Business",
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
color: MihColors.getSecondaryColor( color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 25, fontSize: 25,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -147,7 +149,7 @@ class _MihAddBookmarkAlertState extends State<MihAddBookmarkAlert> {
Text( Text(
"Are you sure you want to save ${widget.business.Name} to your Mzansi Directory?", "Are you sure you want to save ${widget.business.Name} to your Mzansi Directory?",
style: TextStyle( style: TextStyle(
color: MihColors.getSecondaryColor( color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 18, fontSize: 18,
), ),

View File

@@ -126,19 +126,21 @@ class _MihDeleteBookmarkAlertState extends State<MihDeleteBookmarkAlert> {
fullscreen: false, fullscreen: false,
windowTitle: null, windowTitle: null,
onWindowTapClose: null, onWindowTapClose: null,
backgroundColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
windowBody: Column( windowBody: Column(
children: [ children: [
Icon( Icon(
Icons.warning_rounded, Icons.warning_rounded,
size: 150, size: 150,
color: MihColors.getSecondaryColor( color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
), ),
Text( Text(
"Remove Bookmark", "Remove Bookmark",
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
color: MihColors.getSecondaryColor( color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 25, fontSize: 25,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -148,7 +150,7 @@ class _MihDeleteBookmarkAlertState extends State<MihDeleteBookmarkAlert> {
Text( Text(
"Are you sure you want to remove ${widget.business.Name} from your Mzansi Directory?", "Are you sure you want to remove ${widget.business.Name} from your Mzansi Directory?",
style: TextStyle( style: TextStyle(
color: MihColors.getSecondaryColor( color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 18, fontSize: 18,
), ),