BUG: User search piture load

This commit is contained in:
2025-11-27 12:57:15 +02:00
parent ee7d3881e6
commit 969ecf8fdc
6 changed files with 43 additions and 181 deletions

View File

@@ -8,11 +8,9 @@ import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_banner_ad.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_personal_profile_preview.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart';
// import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/components/mih_business_info_card.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart';
@@ -342,9 +340,9 @@ class _PackageToolOneState extends State<PackageToolOne> {
],
),
const SizedBox(height: 10),
MihPersonalProfilePreview(
user: widget.user,
),
// MihPersonalProfilePreview(
// user: widget.user,
// ),
const SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.center,

View File

@@ -1,127 +0,0 @@
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.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_services/mih_file_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_location_services.dart';
import 'package:provider/provider.dart';
class MihBusinessProfilePreview extends StatefulWidget {
final Business business;
const MihBusinessProfilePreview({
super.key,
required this.business,
});
@override
State<MihBusinessProfilePreview> createState() =>
_MihBusinessProfilePreviewState();
}
class _MihBusinessProfilePreviewState extends State<MihBusinessProfilePreview> {
late Future<String> futureImageUrl;
PlatformFile? file;
String calculateDistance(MzansiDirectoryProvider directoryProvider) {
try {
double distanceInKm = MIHLocationAPI().getDistanceInMeaters(
directoryProvider.userLocation, widget.business.gps_location) /
1000;
return "${distanceInKm.toStringAsFixed(2)} km";
} catch (error) {
print(error);
return "*.** km";
}
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
double profilePictureWidth = 60;
return Consumer<MzansiDirectoryProvider>(
builder: (BuildContext context, MzansiDirectoryProvider directoryProvider,
Widget? child) {
return Row(
children: [
FutureBuilder(
future: MihFileApi.getMinioFileUrl(widget.business.logo_path),
builder: (context, asyncSnapshot) {
if (asyncSnapshot.connectionState == ConnectionState.done &&
asyncSnapshot.hasData) {
if (asyncSnapshot.requireData != "") {
return MihCircleAvatar(
imageFile: NetworkImage(asyncSnapshot.requireData),
width: profilePictureWidth,
editable: false,
fileNameController: TextEditingController(),
userSelectedfile: file,
frameColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
backgroundColor: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
onChange: () {},
);
} else {
return Icon(
MihIcons.iDontKnow,
size: profilePictureWidth,
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
);
}
} else {
return Icon(
MihIcons.mihRing,
size: profilePictureWidth,
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
);
}
}),
const SizedBox(width: 15),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
widget.business.Name,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
),
),
Text(
widget.business.type,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
),
),
Text(
directoryProvider.userPosition != null
? calculateDistance(directoryProvider)
: "0.00 km",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 10,
),
),
],
)
],
);
},
);
}
}

View File

@@ -1,17 +1,16 @@
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_circle_avatar.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
class MihPersonalProfilePreview extends StatefulWidget {
final AppUser user;
final ImageProvider<Object>? imageFile;
const MihPersonalProfilePreview({
super.key,
required this.user,
required this.imageFile,
});
@override
@@ -20,14 +19,9 @@ class MihPersonalProfilePreview extends StatefulWidget {
}
class _MihPersonalProfilePreviewState extends State<MihPersonalProfilePreview> {
late Future<String> futureImageUrl;
// String imageUrl = "";
PlatformFile? file;
@override
void initState() {
super.initState();
futureImageUrl = MihFileApi.getMinioFileUrl(widget.user.pro_pic_path);
}
@override
@@ -35,41 +29,17 @@ class _MihPersonalProfilePreviewState extends State<MihPersonalProfilePreview> {
double profilePictureWidth = 60;
return Row(
children: [
FutureBuilder(
future: futureImageUrl,
builder: (context, asyncSnapshot) {
if (asyncSnapshot.connectionState == ConnectionState.done &&
asyncSnapshot.hasData) {
if (asyncSnapshot.requireData != "") {
return MihCircleAvatar(
imageFile: NetworkImage(asyncSnapshot.requireData),
width: profilePictureWidth,
editable: false,
fileNameController: TextEditingController(),
userSelectedfile: file,
frameColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
backgroundColor: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
onChange: () {},
);
} else {
return Icon(
MihIcons.iDontKnow,
size: profilePictureWidth,
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
);
}
} else {
return Icon(
MihIcons.mihRing,
size: profilePictureWidth,
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
);
}
},
MihCircleAvatar(
imageFile: widget.imageFile,
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),
Column(

View File

@@ -57,8 +57,11 @@ class _BuildUserSearchResultsListState
// vertical: 5,
horizontal: 25,
),
child:
MihPersonalProfilePreview(user: widget.userList[index]),
child: MihPersonalProfilePreview(
user: widget.userList[index],
imageFile: directoryProvider
.userSearchImages![widget.userList[index].app_id],
),
),
),
);

View File

@@ -60,7 +60,7 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
void clearAll(MzansiDirectoryProvider directoryProvider) {
directoryProvider
.setSearchedBusinesses(searchedBusinesses: [], businessesImages: {});
directoryProvider.setSearchedUsers(searchedUsers: []);
directoryProvider.setSearchedUsers(searchedUsers: [], userImages: {});
directoryProvider.setSearchTerm(searchTerm: "");
setState(() {
mzansiSearchController.clear();
@@ -80,7 +80,20 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
directoryProvider.searchTerm.isNotEmpty) {
final userResults = await MihUserServices()
.searchUsers(profileProvider, directoryProvider.searchTerm, context);
directoryProvider.setSearchedUsers(searchedUsers: userResults);
Map<String, ImageProvider<Object>?> userImages = {};
String usernProPicUrl = "";
for (var user in userResults) {
KenLogger.success("Business Logo Path: ${user.pro_pic_path}");
usernProPicUrl = await MihFileApi.getMinioFileUrl(user.pro_pic_path);
KenLogger.success("Business Logo Path: ${user.pro_pic_path}");
userImages[user.app_id] =
usernProPicUrl != "" ? NetworkImage(usernProPicUrl) : null;
}
directoryProvider.setSearchedUsers(
searchedUsers: userResults,
userImages: userImages,
);
} else {
List<Business>? businessSearchResults = [];
if (directoryProvider.businessTypeFilter.isNotEmpty) {
@@ -127,7 +140,7 @@ class _MihSearchMzansiState extends State<MihSearchMzansi> {
MihBusinessDetailsServices().fetchAllBusinessTypes();
mzansiSearchController.text = "";
WidgetsBinding.instance.addPostFrameCallback((_) async {
directoryProvider.setSearchedUsers(searchedUsers: []);
directoryProvider.setSearchedUsers(searchedUsers: [], userImages: {});
});
}

View File

@@ -16,6 +16,7 @@ class MzansiDirectoryProvider extends ChangeNotifier {
Map<String, ImageProvider<Object>?>? busSearchImages;
Business? selectedBusiness;
List<AppUser>? searchedUsers;
Map<String, ImageProvider<Object>?>? userSearchImages;
AppUser? selectedUser;
String searchTerm;
String businessTypeFilter;
@@ -92,8 +93,12 @@ class MzansiDirectoryProvider extends ChangeNotifier {
notifyListeners();
}
void setSearchedUsers({required List<AppUser> searchedUsers}) {
void setSearchedUsers({
required List<AppUser> searchedUsers,
required Map<String, ImageProvider<Object>?> userImages,
}) {
this.searchedUsers = searchedUsers;
this.userSearchImages = userImages;
notifyListeners();
}