switch to new image api strat and fix onboarding cache strat

This commit is contained in:
yaso 2026-07-07 14:30:58 +02:00
parent 48b434dad9
commit a5bdee892c
39 changed files with 540 additions and 791 deletions

View file

@ -5,6 +5,7 @@ import 'package:mih_package_toolkit/mih_package_toolkit.dart';
import 'package:mzansi_innovation_hub/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_business_profile_preview.dart';
import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
import 'package:provider/provider.dart';
class BuildBusinessSearchResultsList extends StatefulWidget {
@ -27,8 +28,6 @@ class _BuildBusinessSearchResultsListState
builder: (BuildContext context, MzansiDirectoryProvider directoryProvider,
Widget? child) {
return ListView.separated(
// shrinkWrap: true,
// physics: const NeverScrollableScrollPhysics(),
itemCount: widget.businessList.length,
separatorBuilder: (BuildContext context, index) {
return Divider(
@ -54,32 +53,14 @@ class _BuildBusinessSearchResultsListState
// vertical: 5,
horizontal: 25,
),
child: FutureBuilder(
future: directoryProvider.busSearchImagesUrl![
widget.businessList[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.businessList[index],
imageFile: imageFile,
loading: loading,
);
}),
child: MihBusinessProfilePreview(
business: widget.businessList[index],
imageFile: CachedNetworkImageProvider(
MihFileApi.getMinioFileUrlV2(
widget.businessList[index].logo_path),
),
loading: false,
),
),
),
);

View file

@ -5,6 +5,7 @@ import 'package:mih_package_toolkit/mih_package_toolkit.dart';
import 'package:mzansi_innovation_hub/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_business_profile_preview.dart';
import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
import 'package:provider/provider.dart';
class BuildFavouriteBusinessesList extends StatefulWidget {
@ -59,32 +60,15 @@ class _BuildFavouriteBusinessesListState
padding: EdgeInsets.symmetric(
horizontal: 25,
),
child: FutureBuilder(
future: directoryProvider.favBusImagesUrl![
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,
);
}),
child: MihBusinessProfilePreview(
business: widget.favouriteBusinesses[index]!,
imageFile: CachedNetworkImageProvider(
MihFileApi.getMinioFileUrlV2(
widget.favouriteBusinesses[index]!.logo_path,
),
),
loading: false,
),
),
),
);

View file

@ -5,6 +5,7 @@ import 'package:mih_package_toolkit/mih_package_toolkit.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_personal_profile_preview.dart';
import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
import 'package:provider/provider.dart';
class BuildUserSearchResultsList extends StatefulWidget {
@ -27,8 +28,6 @@ class _BuildUserSearchResultsListState
builder: (BuildContext context, MzansiDirectoryProvider directoryProvider,
Widget? child) {
return ListView.separated(
// shrinkWrap: true,
// physics: const NeverScrollableScrollPhysics(),
itemCount: widget.userList.length,
separatorBuilder: (BuildContext context, index) {
return Divider(
@ -53,32 +52,14 @@ class _BuildUserSearchResultsListState
// vertical: 5,
horizontal: 25,
),
child: FutureBuilder(
future: directoryProvider
.userSearchImagesUrl![widget.userList[index].app_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 MihPersonalProfilePreview(
user: widget.userList[index],
imageFile: imageFile,
loading: loading,
);
}),
child: MihPersonalProfilePreview(
user: widget.userList[index],
imageFile: CachedNetworkImageProvider(
MihFileApi.getMinioFileUrlV2(
widget.userList[index].pro_pic_path),
),
loading: false,
),
),
),
);

View file

@ -6,7 +6,6 @@ import 'package:mzansi_innovation_hub/mih_providers/mzansi_directory_provider.da
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';
@ -37,20 +36,15 @@ class _MihFavouriteBusinessesState extends State<MihFavouriteBusinesses> {
directoryProvider,
);
List<Business> favBus = [];
Map<String, Future<String>> favBusImages = {};
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;
});
}
directoryProvider.setFavouriteBusinesses(
businesses: favBus,
businessesImagesUrl: favBusImages,
);
}
}

View file

@ -1,5 +1,4 @@
import 'package:flutter/material.dart';
import 'package:ken_logger/ken_logger.dart';
import 'package:mih_package_toolkit/mih_package_toolkit.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_objects/business.dart';
@ -9,7 +8,6 @@ import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/bui
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/builders/build_user_search_results_list.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.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_user_services.dart';
import 'package:provider/provider.dart';
@ -26,8 +24,6 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
final TextEditingController mzansiSearchController = TextEditingController();
final TextEditingController businessTypeController = TextEditingController();
final FocusNode searchFocusNode = FocusNode();
// late bool userSearch;
// Future<List<AppUser>?> futureUserSearchResults = Future.value();
List<AppUser> userSearchResults = [];
List<Business> businessSearchResults = [];
late Future<List<String>> availableBusinessTypes;
@ -51,9 +47,8 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
}
void clearAll(MzansiDirectoryProvider directoryProvider) {
directoryProvider
.setSearchedBusinesses(searchedBusinesses: [], businessesImagesUrl: {});
directoryProvider.setSearchedUsers(searchedUsers: [], userImagesUrl: {});
directoryProvider.setSearchedBusinesses(searchedBusinesses: []);
directoryProvider.setSearchedUsers(searchedUsers: []);
directoryProvider.setSearchTerm(searchTerm: "");
setState(() {
mzansiSearchController.clear();
@ -73,19 +68,8 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
directoryProvider.searchTerm.isNotEmpty) {
final userResults = await MihUserServices()
.searchUsers(profileProvider, directoryProvider.searchTerm, context);
Map<String, Future<String>> userImages = {};
Future<String> usernProPicUrl;
for (var user in userResults) {
usernProPicUrl = MihFileApi.getMinioFileUrl(user.pro_pic_path);
userImages[user.app_id] = usernProPicUrl;
// != ""
// ? CachedNetworkImageProvider(usernProPicUrl)
// : null;
}
directoryProvider.setSearchedUsers(
searchedUsers: userResults,
userImagesUrl: userImages,
);
} else {
List<Business>? businessSearchResults = [];
@ -98,18 +82,8 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
.searchBusinesses(directoryProvider.searchTerm,
directoryProvider.businessTypeFilter, context);
}
Map<String, Future<String>> busImagesUrl = {};
Future<String> businessLogoUrl;
for (var bus in businessSearchResults) {
businessLogoUrl = MihFileApi.getMinioFileUrl(bus.logo_path);
busImagesUrl[bus.business_id] = businessLogoUrl;
// != ""
// ? CachedNetworkImageProvider(businessLogoUrl)
// : null;
}
directoryProvider.setSearchedBusinesses(
searchedBusinesses: businessSearchResults,
businessesImagesUrl: busImagesUrl,
);
}
setState(() {