BUG: Business Profile Tool Transitions

This commit is contained in:
2025-11-04 10:15:34 +02:00
parent 821cbc0a0d
commit 76d24a8e2b
8 changed files with 93 additions and 100 deletions

View File

@@ -17,7 +17,7 @@ import 'package:mzansi_innovation_hub/mih_packages/mih_home/mih_route_error.dart
import 'package:mzansi_innovation_hub/mih_packages/mine_sweeper/mih_mine_sweeper.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_ai/mzansi_ai.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/mzansi_directory.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/mzansi_business_profile.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/busines_profile.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/mzansi_business_profile_view.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/mzansi_set_up_business_profile.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/mzansi_profile.dart';
@@ -190,9 +190,10 @@ class MihGoRouter {
});
return const SizedBox.shrink();
}
return MzansiBusinessProfile(
key: UniqueKey(),
);
return BusinesProfile();
// return MzansiBusinessProfile(
// key: UniqueKey(),
// );
},
),
GoRoute(

View File

@@ -1,34 +1,45 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.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_profile_provider.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart';
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_reviews.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_user_search.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_team.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_business_employee_services.dart';
import 'package:provider/provider.dart';
class MzansiBusinessProfile extends StatefulWidget {
const MzansiBusinessProfile({
super.key,
});
class BusinesProfile extends StatefulWidget {
const BusinesProfile({super.key});
@override
State<MzansiBusinessProfile> createState() => _MzansiBusinessProfileState();
State<BusinesProfile> createState() => _BusinesProfileState();
}
class _MzansiBusinessProfileState extends State<MzansiBusinessProfile> {
class _BusinesProfileState extends State<BusinesProfile> {
Future<void> initialiseBusinessData() async {
MzansiProfileProvider profileProvider =
context.read<MzansiProfileProvider>();
await MihBusinessEmployeeServices()
.fetchEmployees(profileProvider, context);
}
@override
void initState() {
super.initState();
initialiseBusinessData();
}
@override
Widget build(BuildContext context) {
return MihPackage(
appActionButton: getAction(),
appTools: getTools(),
appBody: getToolBody(),
appToolTitles: getToolTitle(),
selectedbodyIndex: context.watch<MzansiProfileProvider>().businessIndex,
onIndexChange: (newIndex) {
context.read<MzansiProfileProvider>().setBusinessIndex(newIndex);
@@ -45,7 +56,6 @@ class _MzansiBusinessProfileState extends State<MzansiBusinessProfile> {
'mihHome',
);
FocusScope.of(context).unfocus();
context.read<MzansiProfileProvider>().setBusinessIndex(0);
},
);
}
@@ -79,22 +89,6 @@ class _MzansiBusinessProfileState extends State<MzansiBusinessProfile> {
);
}
List<Widget> getToolBody() {
List<Widget> toolBodies = [
MihBusinessDetails(),
MihMyBusinessUser(),
MihMyBusinessTeam(),
MihBusinessUserSearch(),
MihBusinessReviews(
business: context.watch<MzansiProfileProvider>().business!),
MihBusinessQrCode(
business: context.watch<MzansiProfileProvider>().business!,
// startUpSearch: "",
),
];
return toolBodies;
}
List<String> getToolTitle() {
List<String> toolTitles = [
"Profile",
@@ -106,4 +100,16 @@ class _MzansiBusinessProfileState extends State<MzansiBusinessProfile> {
];
return toolTitles;
}
List<Widget> getToolBody() {
List<Widget> toolBodies = [
MihBusinessDetails(),
MihMyBusinessUser(),
MihMyBusinessTeam(),
MihBusinessUserSearch(),
MihBusinessReviews(business: null),
MihBusinessQrCode(business: null),
];
return toolBodies;
}
}

View File

@@ -14,22 +14,22 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.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_config/mih_env.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_file_services.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.dart';
import 'package:provider/provider.dart';
import 'package:screenshot/screenshot.dart';
import 'package:share_plus/share_plus.dart';
import 'package:supertokens_flutter/supertokens.dart';
class MihBusinessQrCode extends StatefulWidget {
final Business business;
// final String? startUpSearch;
final Business? business;
const MihBusinessQrCode({
super.key,
required this.business,
// required this.startUpSearch,
});
@override
@@ -38,6 +38,7 @@ class MihBusinessQrCode extends StatefulWidget {
class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
late Future<String> futureImageUrl;
late Business business;
PlatformFile? file;
late String qrCodedata;
int qrSize = 500;
@@ -66,14 +67,14 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
.substring(2, 8);
// KenLogger.warning(bgColor);
String encodedData =
Uri.encodeComponent("$qrCodedata${widget.business.business_id}");
Uri.encodeComponent("$qrCodedata${business.business_id}");
return "https://api.qrserver.com/v1/create-qr-code/?data=$encodedData&size=${qrSize}x${qrSize}&bgcolor=$bgColor&color=$color";
}
Future<void> saveImage(Uint8List imageBytes) async {
final String filename =
"${widget.business.Name}_QR_Code_${DateTime.now().millisecondsSinceEpoch}.png";
"${business.Name}_QR_Code_${DateTime.now().millisecondsSinceEpoch}.png";
if (kIsWeb) {
await FileSaver.instance.saveFile(
name: filename,
@@ -241,7 +242,7 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
),
FittedBox(
child: Text(
widget.business.Name,
business.Name,
style: TextStyle(
fontSize: 35,
fontWeight: FontWeight.bold,
@@ -253,7 +254,7 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
),
FittedBox(
child: Text(
widget.business.type,
business.type,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
@@ -335,9 +336,15 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
@override
void initState() {
super.initState();
MzansiProfileProvider profileProvider =
context.read<MzansiProfileProvider>();
if (widget.business != null) {
business = widget.business!;
} else {
business = profileProvider.business!;
}
_checkUserSession();
futureImageUrl =
MihFileApi.getMinioFileUrl(widget.business.logo_path, context);
futureImageUrl = MihFileApi.getMinioFileUrl(business.logo_path, context);
qrCodedata =
"${AppEnviroment.baseAppUrl}/business-profile/view?business_id=";
}
@@ -418,8 +425,8 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
onTap: () {
shareMIHLink(
context,
"Check out ${widget.business.Name} on the MIH app",
"$qrCodedata${widget.business.business_id}",
"Check out ${business.Name} on the MIH app",
"$qrCodedata${business.business_id}",
);
},
),

View File

@@ -5,12 +5,14 @@ import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_review.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.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_profile/business_profile/components/mih_review_business_window.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
import 'package:provider/provider.dart';
class MihBusinessReviews extends StatefulWidget {
final Business business;
final Business? business;
const MihBusinessReviews({
super.key,
required this.business,
@@ -21,15 +23,19 @@ class MihBusinessReviews extends StatefulWidget {
}
class _MihBusinessReviewsState extends State<MihBusinessReviews> {
// late Future<List<BusinessReview>> _reviews;
late Business business;
// @override
// void initState() {
// super.initState();
// _reviews = MihMzansiDirectoryServices().getAllReviewsofBusiness(
// widget.businessId,
// );
// }
@override
void initState() {
super.initState();
MzansiProfileProvider profileProvider =
context.read<MzansiProfileProvider>();
if (widget.business != null) {
business = widget.business!;
} else {
business = profileProvider.business!;
}
}
void onReviewTap(BusinessReview? businessReview, double width) {
// showDialog(context: context, builder: (context)=> )
@@ -37,7 +43,7 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
context: context,
builder: (context) {
return MihReviewBusinessWindow(
business: widget.business,
business: business,
businessReview: businessReview,
screenWidth: width,
readOnly: true,
@@ -52,7 +58,7 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
double screenWidth = MediaQuery.of(context).size.width;
return FutureBuilder(
future: MihMzansiDirectoryServices().getAllReviewsofBusiness(
widget.business.business_id,
business.business_id,
),
builder: (context, asyncSnapshot) {
if (asyncSnapshot.connectionState == ConnectionState.waiting) {
@@ -93,7 +99,7 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
),
const SizedBox(height: 10),
Text(
"No reviews yet, be the first the review ${widget.business.Name}",
"No reviews yet, be the first the review ${business.Name}",
textAlign: TextAlign.center,
overflow: TextOverflow.visible,
style: TextStyle(

View File

@@ -36,11 +36,9 @@ class _MihBusinessUserSearchState extends State<MihBusinessUserSearch> {
void submitUserForm(MzansiProfileProvider profileProvider) {
if (searchController.text != "") {
setState(() {
userSearch = searchController.text;
hasSearchedBefore = true;
userSearchResults = fetchUsers(profileProvider, userSearch);
});
userSearch = searchController.text;
hasSearchedBefore = true;
userSearchResults = fetchUsers(profileProvider, userSearch);
}
}
@@ -192,6 +190,7 @@ class _MihBusinessUserSearchState extends State<MihBusinessUserSearch> {
searchController.clear();
userSearch = "";
});
profileProvider.setUserearchResults(userSearchResults: []);
},
searchFocusNode: _searchFocusNode,
),

View File

@@ -7,7 +7,6 @@ import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_employee.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart';
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_business_employee_services.dart';
import 'package:provider/provider.dart';
class MihMyBusinessTeam extends StatefulWidget {
@@ -23,32 +22,11 @@ class _MihMyBusinessTeamState extends State<MihMyBusinessTeam> {
String errorCode = "";
String errorBody = "";
void getEmployeeData(MzansiProfileProvider mzansiProfileProvider) {
WidgetsBinding.instance.addPostFrameCallback((_) async {
await MihBusinessEmployeeServices()
.fetchEmployees(mzansiProfileProvider, context);
});
}
// Future<void> fetchEmployees(
// MzansiProfileProvider mzansiProfileProvider) async {
// //print("Patien manager page: $endpoint");
// final response = await http.get(Uri.parse(
// "${AppEnviroment.baseApiUrl}/business-user/employees/${mzansiProfileProvider.businessUser!.business_id}"));
// errorCode = response.statusCode.toString();
// errorBody = response.body;
// if (response.statusCode == 200) {
// //print("Here1");
// Iterable l = jsonDecode(response.body);
// //print("Here2");
// List<BusinessEmployee> employeeList = List<BusinessEmployee>.from(
// l.map((model) => BusinessEmployee.fromJson(model)));
// mzansiProfileProvider.setEmployeeList(employeeList: employeeList);
// //print("Here3");
// //print(patientQueue);
// // return patientQueue;
// } else {
// throw Exception('failed to load employees');
// }
// void getEmployeeData(MzansiProfileProvider mzansiProfileProvider) {
// WidgetsBinding.instance.addPostFrameCallback((_) async {
// await MihBusinessEmployeeServices()
// .fetchEmployees(mzansiProfileProvider, context);
// });
// }
Widget displayEmployeeList(List<BusinessEmployee> employeeList) {
@@ -89,7 +67,6 @@ class _MihMyBusinessTeamState extends State<MihMyBusinessTeam> {
builder: (BuildContext context,
MzansiProfileProvider mzansiProfileProvider, Widget? child) {
if (mzansiProfileProvider.employeeList == null) {
getEmployeeData(mzansiProfileProvider);
return Center(
child: Mihloadingcircle(),
);

View File

@@ -218,19 +218,17 @@ class _MihMyBusinessUserState extends State<MihMyBusinessUser> {
void setControllers() {
MzansiProfileProvider mzansiProfileProvider =
context.read<MzansiProfileProvider>();
setState(() {
fileNameController.text =
mzansiProfileProvider.user!.pro_pic_path.split("/").last;
signtureController.text =
mzansiProfileProvider.businessUser!.sig_path.split("/").last;
KenLogger.success("title: ${mzansiProfileProvider.businessUser!.title}");
KenLogger.success(
"sig url: ${mzansiProfileProvider.businessUser!.sig_path}");
titleTextController.text = mzansiProfileProvider.businessUser!.title;
fnameController.text = mzansiProfileProvider.user!.fname;
lnameController.text = mzansiProfileProvider.user!.lname;
accessController.text = mzansiProfileProvider.businessUser!.access;
});
fileNameController.text =
mzansiProfileProvider.user!.pro_pic_path.split("/").last;
signtureController.text =
mzansiProfileProvider.businessUser!.sig_path.split("/").last;
KenLogger.success("title: ${mzansiProfileProvider.businessUser!.title}");
KenLogger.success(
"sig url: ${mzansiProfileProvider.businessUser!.sig_path}");
titleTextController.text = mzansiProfileProvider.businessUser!.title;
fnameController.text = mzansiProfileProvider.user!.fname;
lnameController.text = mzansiProfileProvider.user!.lname;
accessController.text = mzansiProfileProvider.businessUser!.access;
if (AppEnviroment.getEnv() == "Prod") {
env = "Prod";
} else {

View File

@@ -94,7 +94,6 @@ class _MihWalletState extends State<MihWallet> {
temp[const Icon(Icons.favorite)] = () {
context.read<MzansiWalletProvider>().setToolIndex(1);
};
return MihPackageTools(
tools: temp,
selcetedIndex: context.watch<MzansiWalletProvider>().toolIndex,