QOL: Data display load Mzansi Direct pt1
This commit is contained in:
@@ -11,10 +11,12 @@ import 'package:provider/provider.dart';
|
|||||||
class MihBusinessProfilePreview extends StatefulWidget {
|
class MihBusinessProfilePreview extends StatefulWidget {
|
||||||
final Business business;
|
final Business business;
|
||||||
final ImageProvider<Object>? imageFile;
|
final ImageProvider<Object>? imageFile;
|
||||||
|
final bool loading;
|
||||||
const MihBusinessProfilePreview({
|
const MihBusinessProfilePreview({
|
||||||
super.key,
|
super.key,
|
||||||
required this.business,
|
required this.business,
|
||||||
required this.imageFile,
|
required this.imageFile,
|
||||||
|
required this.loading,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -48,23 +50,35 @@ class _MihBusinessProfilePreviewState extends State<MihBusinessProfilePreview> {
|
|||||||
Widget? child) {
|
Widget? child) {
|
||||||
return Row(
|
return Row(
|
||||||
children: [
|
children: [
|
||||||
widget.imageFile == null
|
widget.loading
|
||||||
? Icon(
|
? Icon(
|
||||||
MihIcons.iDontKnow,
|
MihIcons.mihRing,
|
||||||
size: profilePictureWidth,
|
size: profilePictureWidth,
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
)
|
)
|
||||||
: MihCircleAvatar(
|
: widget.imageFile == null
|
||||||
imageFile: widget.imageFile,
|
? Icon(
|
||||||
width: profilePictureWidth,
|
MihIcons.iDontKnow,
|
||||||
editable: false,
|
size: profilePictureWidth,
|
||||||
fileNameController: TextEditingController(),
|
color: MihColors.getSecondaryColor(
|
||||||
userSelectedfile: null,
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
frameColor: MihColors.getSecondaryColor(
|
"Dark"),
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
)
|
||||||
backgroundColor: MihColors.getPrimaryColor(
|
: MihCircleAvatar(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
imageFile: widget.imageFile,
|
||||||
onChange: () {},
|
width: profilePictureWidth,
|
||||||
),
|
editable: false,
|
||||||
|
fileNameController: TextEditingController(),
|
||||||
|
userSelectedfile: null,
|
||||||
|
frameColor: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
backgroundColor: MihColors.getPrimaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
|
"Dark"),
|
||||||
|
onChange: () {},
|
||||||
|
),
|
||||||
const SizedBox(width: 15),
|
const SizedBox(width: 15),
|
||||||
Column(
|
Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ class _BuildBusinessSearchResultsListState
|
|||||||
business: widget.businessList[index],
|
business: widget.businessList[index],
|
||||||
imageFile: directoryProvider.busSearchImages![
|
imageFile: directoryProvider.busSearchImages![
|
||||||
widget.businessList[index].business_id],
|
widget.businessList[index].business_id],
|
||||||
|
loading: false,
|
||||||
|
//To Do
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:mzansi_innovation_hub/main.dart';
|
import 'package:mzansi_innovation_hub/main.dart';
|
||||||
@@ -21,6 +22,11 @@ class BuildFavouriteBusinessesList extends StatefulWidget {
|
|||||||
|
|
||||||
class _BuildFavouriteBusinessesListState
|
class _BuildFavouriteBusinessesListState
|
||||||
extends State<BuildFavouriteBusinessesList> {
|
extends State<BuildFavouriteBusinessesList> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Consumer<MzansiDirectoryProvider>(
|
return Consumer<MzansiDirectoryProvider>(
|
||||||
@@ -57,11 +63,32 @@ class _BuildFavouriteBusinessesListState
|
|||||||
padding: EdgeInsets.symmetric(
|
padding: EdgeInsets.symmetric(
|
||||||
horizontal: 25,
|
horizontal: 25,
|
||||||
),
|
),
|
||||||
child: MihBusinessProfilePreview(
|
child: FutureBuilder(
|
||||||
business: widget.favouriteBusinesses[index]!,
|
future: directoryProvider.favBusImagesUrl![
|
||||||
imageFile: directoryProvider.favBusImages![
|
widget.favouriteBusinesses[index]!.business_id],
|
||||||
widget.favouriteBusinesses[index]!.business_id],
|
builder: (context, asyncSnapshot) {
|
||||||
),
|
ImageProvider<Object>? imageFile;
|
||||||
|
bool loading = true;
|
||||||
|
if (asyncSnapshot.connectionState ==
|
||||||
|
ConnectionState.done) {
|
||||||
|
loading = false;
|
||||||
|
if (asyncSnapshot.hasData) {
|
||||||
|
imageFile = asyncSnapshot.requireData != ""
|
||||||
|
? CachedNetworkImageProvider(
|
||||||
|
asyncSnapshot.requireData)
|
||||||
|
: null;
|
||||||
|
} else {
|
||||||
|
imageFile = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
imageFile = null;
|
||||||
|
}
|
||||||
|
return MihBusinessProfilePreview(
|
||||||
|
business: widget.favouriteBusinesses[index]!,
|
||||||
|
imageFile: imageFile,
|
||||||
|
loading: loading,
|
||||||
|
);
|
||||||
|
}),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:cached_network_image/cached_network_image.dart';
|
|
||||||
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';
|
||||||
@@ -43,7 +42,7 @@ class _MzansiDirectoryState extends State<MzansiDirectory> {
|
|||||||
await MihDataHelperServices().loadUserDataOnly(
|
await MihDataHelperServices().loadUserDataOnly(
|
||||||
mzansiProfileProvider,
|
mzansiProfileProvider,
|
||||||
);
|
);
|
||||||
await getFavouriteBusinesses();
|
// await getFavouriteBusinesses();
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoadingInitialData = false;
|
_isLoadingInitialData = false;
|
||||||
});
|
});
|
||||||
@@ -67,22 +66,25 @@ class _MzansiDirectoryState extends State<MzansiDirectory> {
|
|||||||
directoryProvider,
|
directoryProvider,
|
||||||
);
|
);
|
||||||
List<Business> favBus = [];
|
List<Business> favBus = [];
|
||||||
Map<String, ImageProvider<Object>?> favBusImages = {};
|
// Map<String, ImageProvider<Object>?> favBusImages = {};
|
||||||
String businessLogoUrl = "";
|
Map<String, Future<String>> favBusImages = {};
|
||||||
|
// String businessLogoUrl = "";
|
||||||
|
Future<String> businessLogoUrl;
|
||||||
for (var bus in directoryProvider.bookmarkedBusinesses) {
|
for (var bus in directoryProvider.bookmarkedBusinesses) {
|
||||||
await MihBusinessDetailsServices()
|
await MihBusinessDetailsServices()
|
||||||
.getBusinessDetailsByBusinessId(bus.business_id)
|
.getBusinessDetailsByBusinessId(bus.business_id)
|
||||||
.then((business) async {
|
.then((business) async {
|
||||||
favBus.add(business!);
|
favBus.add(business!);
|
||||||
businessLogoUrl = await MihFileApi.getMinioFileUrl(business.logo_path);
|
businessLogoUrl = MihFileApi.getMinioFileUrl(business.logo_path);
|
||||||
favBusImages[business.business_id] = businessLogoUrl != ""
|
favBusImages[business.business_id] = businessLogoUrl;
|
||||||
? CachedNetworkImageProvider(businessLogoUrl)
|
// != ""
|
||||||
: null;
|
// ? CachedNetworkImageProvider(businessLogoUrl)
|
||||||
|
// : null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
directoryProvider.setFavouriteBusinesses(
|
directoryProvider.setFavouriteBusinesses(
|
||||||
businesses: favBus,
|
businesses: favBus,
|
||||||
businessesImages: favBusImages,
|
businessesImagesUrl: favBusImages,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// // --- REVISED FUNCTION FOR PARALLEL FETCHING ---
|
// // --- REVISED FUNCTION FOR PARALLEL FETCHING ---
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.
|
|||||||
import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart';
|
import 'package:mzansi_innovation_hub/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';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_services/mih_business_details_services.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_services/mih_file_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 MihFavouriteBusinesses extends StatefulWidget {
|
class MihFavouriteBusinesses extends StatefulWidget {
|
||||||
@@ -28,6 +32,37 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
|
|||||||
ValueNotifier([]);
|
ValueNotifier([]);
|
||||||
Timer? _debounce;
|
Timer? _debounce;
|
||||||
|
|
||||||
|
Future<void> getFavouriteBusinesses(
|
||||||
|
MzansiDirectoryProvider directoryProvider) async {
|
||||||
|
MzansiProfileProvider profileProvider =
|
||||||
|
context.read<MzansiProfileProvider>();
|
||||||
|
if (directoryProvider.bookmarkedBusinesses.isEmpty) {
|
||||||
|
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;
|
||||||
|
// businessLogoUrl != "" ? NetworkImage(businessLogoUrl) : null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
directoryProvider.setFavouriteBusinesses(
|
||||||
|
businesses: favBus,
|
||||||
|
businessesImagesUrl: favBusImages,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) {
|
void _filterAndSetBusinesses(MzansiDirectoryProvider directoryProvider) {
|
||||||
List<Business?> businessesToDisplay = [];
|
List<Business?> businessesToDisplay = [];
|
||||||
String query = businessSearchController.text.toLowerCase();
|
String query = businessSearchController.text.toLowerCase();
|
||||||
@@ -58,6 +93,7 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
|
|||||||
// mzansiProfileProvider,
|
// mzansiProfileProvider,
|
||||||
// directoryProvider,
|
// directoryProvider,
|
||||||
// );
|
// );
|
||||||
|
getFavouriteBusinesses(directoryProvider);
|
||||||
_filterAndSetBusinesses(directoryProvider);
|
_filterAndSetBusinesses(directoryProvider);
|
||||||
businessSearchController.addListener(() {
|
businessSearchController.addListener(() {
|
||||||
if (_debounce?.isActive ?? false) {
|
if (_debounce?.isActive ?? false) {
|
||||||
@@ -141,7 +177,7 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
|
|||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 50),
|
const SizedBox(height: 50),
|
||||||
|
|||||||
@@ -38,21 +38,23 @@ class _MihAddBookmarkAlertState extends State<MihAddBookmarkAlert> {
|
|||||||
directoryProvider,
|
directoryProvider,
|
||||||
);
|
);
|
||||||
List<Business> favBus = [];
|
List<Business> favBus = [];
|
||||||
Map<String, ImageProvider<Object>?> favBusImages = {};
|
// Map<String, ImageProvider<Object>?> favBusImages = {};
|
||||||
String businessLogoUrl = "";
|
Map<String, Future<String>> favBusImages = {};
|
||||||
|
// String businessLogoUrl = "";
|
||||||
|
Future<String> businessLogoUrl;
|
||||||
for (var bus in directoryProvider.bookmarkedBusinesses) {
|
for (var bus in directoryProvider.bookmarkedBusinesses) {
|
||||||
await MihBusinessDetailsServices()
|
await MihBusinessDetailsServices()
|
||||||
.getBusinessDetailsByBusinessId(bus.business_id)
|
.getBusinessDetailsByBusinessId(bus.business_id)
|
||||||
.then((business) async {
|
.then((business) async {
|
||||||
favBus.add(business!);
|
favBus.add(business!);
|
||||||
businessLogoUrl = await MihFileApi.getMinioFileUrl(business.logo_path);
|
businessLogoUrl = MihFileApi.getMinioFileUrl(business.logo_path);
|
||||||
favBusImages[business.business_id] =
|
favBusImages[business.business_id] = businessLogoUrl;
|
||||||
businessLogoUrl != "" ? NetworkImage(businessLogoUrl) : null;
|
// businessLogoUrl != "" ? NetworkImage(businessLogoUrl) : null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
directoryProvider.setFavouriteBusinesses(
|
directoryProvider.setFavouriteBusinesses(
|
||||||
businesses: favBus,
|
businesses: favBus,
|
||||||
businessesImages: favBusImages,
|
businessesImagesUrl: favBusImages,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,21 +43,23 @@ class _MihDeleteBookmarkAlertState extends State<MihDeleteBookmarkAlert> {
|
|||||||
directoryProvider,
|
directoryProvider,
|
||||||
);
|
);
|
||||||
List<Business> favBus = [];
|
List<Business> favBus = [];
|
||||||
Map<String, ImageProvider<Object>?> favBusImages = {};
|
// Map<String, ImageProvider<Object>?> favBusImages = {};
|
||||||
String businessLogoUrl = "";
|
Map<String, Future<String>> favBusImages = {};
|
||||||
|
// String businessLogoUrl = "";
|
||||||
|
Future<String> businessLogoUrl;
|
||||||
for (var bus in directoryProvider.bookmarkedBusinesses) {
|
for (var bus in directoryProvider.bookmarkedBusinesses) {
|
||||||
await MihBusinessDetailsServices()
|
await MihBusinessDetailsServices()
|
||||||
.getBusinessDetailsByBusinessId(bus.business_id)
|
.getBusinessDetailsByBusinessId(bus.business_id)
|
||||||
.then((business) async {
|
.then((business) async {
|
||||||
favBus.add(business!);
|
favBus.add(business!);
|
||||||
businessLogoUrl = await MihFileApi.getMinioFileUrl(business.logo_path);
|
businessLogoUrl = MihFileApi.getMinioFileUrl(business.logo_path);
|
||||||
favBusImages[business.business_id] =
|
favBusImages[business.business_id] = businessLogoUrl;
|
||||||
businessLogoUrl != "" ? NetworkImage(businessLogoUrl) : null;
|
// businessLogoUrl != "" ? NetworkImage(businessLogoUrl) : null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
directoryProvider.setFavouriteBusinesses(
|
directoryProvider.setFavouriteBusinesses(
|
||||||
businesses: favBus,
|
businesses: favBus,
|
||||||
businessesImages: favBusImages,
|
businessesImagesUrl: favBusImages,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ class MzansiDirectoryProvider extends ChangeNotifier {
|
|||||||
List<BookmarkedBusiness> bookmarkedBusinesses = [];
|
List<BookmarkedBusiness> bookmarkedBusinesses = [];
|
||||||
List<Business>? favouriteBusinessesList;
|
List<Business>? favouriteBusinessesList;
|
||||||
Map<String, ImageProvider<Object>?>? favBusImages;
|
Map<String, ImageProvider<Object>?>? favBusImages;
|
||||||
|
Map<String, Future<String>>? favBusImagesUrl;
|
||||||
List<Business>? searchedBusinesses;
|
List<Business>? searchedBusinesses;
|
||||||
Map<String, ImageProvider<Object>?>? busSearchImages;
|
Map<String, ImageProvider<Object>?>? busSearchImages;
|
||||||
Business? selectedBusiness;
|
Business? selectedBusiness;
|
||||||
@@ -72,10 +73,12 @@ class MzansiDirectoryProvider extends ChangeNotifier {
|
|||||||
|
|
||||||
void setFavouriteBusinesses({
|
void setFavouriteBusinesses({
|
||||||
required List<Business> businesses,
|
required List<Business> businesses,
|
||||||
required Map<String, ImageProvider<Object>?> businessesImages,
|
required Map<String, Future<String>> businessesImagesUrl,
|
||||||
|
// required Map<String, ImageProvider<Object>?> businessesImages,
|
||||||
}) {
|
}) {
|
||||||
favouriteBusinessesList = businesses;
|
favouriteBusinessesList = businesses;
|
||||||
favBusImages = businessesImages;
|
// favBusImages = businessesImages;
|
||||||
|
favBusImagesUrl = businessesImagesUrl;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user