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/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_ai/mzansi_ai.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_directory/mzansi_directory.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_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/business_profile/mzansi_set_up_business_profile.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/personal_profile/mzansi_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 const SizedBox.shrink();
} }
return MzansiBusinessProfile( return BusinesProfile();
key: UniqueKey(), // return MzansiBusinessProfile(
); // key: UniqueKey(),
// );
}, },
), ),
GoRoute( GoRoute(

View File

@@ -1,34 +1,45 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.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.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_action.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.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: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_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_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_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_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_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'; import 'package:provider/provider.dart';
class MzansiBusinessProfile extends StatefulWidget { class BusinesProfile extends StatefulWidget {
const MzansiBusinessProfile({ const BusinesProfile({super.key});
super.key,
});
@override @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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MihPackage( return MihPackage(
appActionButton: getAction(), appActionButton: getAction(),
appTools: getTools(), appTools: getTools(),
appBody: getToolBody(), appBody: getToolBody(),
appToolTitles: getToolTitle(),
selectedbodyIndex: context.watch<MzansiProfileProvider>().businessIndex, selectedbodyIndex: context.watch<MzansiProfileProvider>().businessIndex,
onIndexChange: (newIndex) { onIndexChange: (newIndex) {
context.read<MzansiProfileProvider>().setBusinessIndex(newIndex); context.read<MzansiProfileProvider>().setBusinessIndex(newIndex);
@@ -45,7 +56,6 @@ class _MzansiBusinessProfileState extends State<MzansiBusinessProfile> {
'mihHome', 'mihHome',
); );
FocusScope.of(context).unfocus(); 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> getToolTitle() {
List<String> toolTitles = [ List<String> toolTitles = [
"Profile", "Profile",
@@ -106,4 +100,16 @@ class _MzansiBusinessProfileState extends State<MzansiBusinessProfile> {
]; ];
return toolTitles; 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_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_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_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_colors.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_env.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_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_package_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_circle_avatar.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:screenshot/screenshot.dart';
import 'package:share_plus/share_plus.dart'; import 'package:share_plus/share_plus.dart';
import 'package:supertokens_flutter/supertokens.dart'; import 'package:supertokens_flutter/supertokens.dart';
class MihBusinessQrCode extends StatefulWidget { class MihBusinessQrCode extends StatefulWidget {
final Business business; final Business? business;
// final String? startUpSearch;
const MihBusinessQrCode({ const MihBusinessQrCode({
super.key, super.key,
required this.business, required this.business,
// required this.startUpSearch,
}); });
@override @override
@@ -38,6 +38,7 @@ class MihBusinessQrCode extends StatefulWidget {
class _MihBusinessQrCodeState extends State<MihBusinessQrCode> { class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
late Future<String> futureImageUrl; late Future<String> futureImageUrl;
late Business business;
PlatformFile? file; PlatformFile? file;
late String qrCodedata; late String qrCodedata;
int qrSize = 500; int qrSize = 500;
@@ -66,14 +67,14 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
.substring(2, 8); .substring(2, 8);
// KenLogger.warning(bgColor); // KenLogger.warning(bgColor);
String encodedData = 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"; 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 { Future<void> saveImage(Uint8List imageBytes) async {
final String filename = final String filename =
"${widget.business.Name}_QR_Code_${DateTime.now().millisecondsSinceEpoch}.png"; "${business.Name}_QR_Code_${DateTime.now().millisecondsSinceEpoch}.png";
if (kIsWeb) { if (kIsWeb) {
await FileSaver.instance.saveFile( await FileSaver.instance.saveFile(
name: filename, name: filename,
@@ -241,7 +242,7 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
), ),
FittedBox( FittedBox(
child: Text( child: Text(
widget.business.Name, business.Name,
style: TextStyle( style: TextStyle(
fontSize: 35, fontSize: 35,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -253,7 +254,7 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
), ),
FittedBox( FittedBox(
child: Text( child: Text(
widget.business.type, business.type,
style: TextStyle( style: TextStyle(
fontSize: 20, fontSize: 20,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@@ -335,9 +336,15 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
MzansiProfileProvider profileProvider =
context.read<MzansiProfileProvider>();
if (widget.business != null) {
business = widget.business!;
} else {
business = profileProvider.business!;
}
_checkUserSession(); _checkUserSession();
futureImageUrl = futureImageUrl = MihFileApi.getMinioFileUrl(business.logo_path, context);
MihFileApi.getMinioFileUrl(widget.business.logo_path, context);
qrCodedata = qrCodedata =
"${AppEnviroment.baseAppUrl}/business-profile/view?business_id="; "${AppEnviroment.baseAppUrl}/business-profile/view?business_id=";
} }
@@ -418,8 +425,8 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
onTap: () { onTap: () {
shareMIHLink( shareMIHLink(
context, context,
"Check out ${widget.business.Name} on the MIH app", "Check out ${business.Name} on the MIH app",
"$qrCodedata${widget.business.business_id}", "$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_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_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_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_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_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:mzansi_innovation_hub/mih_services/mih_mzansi_directory_services.dart';
import 'package:provider/provider.dart';
class MihBusinessReviews extends StatefulWidget { class MihBusinessReviews extends StatefulWidget {
final Business business; final Business? business;
const MihBusinessReviews({ const MihBusinessReviews({
super.key, super.key,
required this.business, required this.business,
@@ -21,15 +23,19 @@ class MihBusinessReviews extends StatefulWidget {
} }
class _MihBusinessReviewsState extends State<MihBusinessReviews> { class _MihBusinessReviewsState extends State<MihBusinessReviews> {
// late Future<List<BusinessReview>> _reviews; late Business business;
// @override @override
// void initState() { void initState() {
// super.initState(); super.initState();
// _reviews = MihMzansiDirectoryServices().getAllReviewsofBusiness( MzansiProfileProvider profileProvider =
// widget.businessId, context.read<MzansiProfileProvider>();
// ); if (widget.business != null) {
// } business = widget.business!;
} else {
business = profileProvider.business!;
}
}
void onReviewTap(BusinessReview? businessReview, double width) { void onReviewTap(BusinessReview? businessReview, double width) {
// showDialog(context: context, builder: (context)=> ) // showDialog(context: context, builder: (context)=> )
@@ -37,7 +43,7 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
context: context, context: context,
builder: (context) { builder: (context) {
return MihReviewBusinessWindow( return MihReviewBusinessWindow(
business: widget.business, business: business,
businessReview: businessReview, businessReview: businessReview,
screenWidth: width, screenWidth: width,
readOnly: true, readOnly: true,
@@ -52,7 +58,7 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
double screenWidth = MediaQuery.of(context).size.width; double screenWidth = MediaQuery.of(context).size.width;
return FutureBuilder( return FutureBuilder(
future: MihMzansiDirectoryServices().getAllReviewsofBusiness( future: MihMzansiDirectoryServices().getAllReviewsofBusiness(
widget.business.business_id, business.business_id,
), ),
builder: (context, asyncSnapshot) { builder: (context, asyncSnapshot) {
if (asyncSnapshot.connectionState == ConnectionState.waiting) { if (asyncSnapshot.connectionState == ConnectionState.waiting) {
@@ -93,7 +99,7 @@ class _MihBusinessReviewsState extends State<MihBusinessReviews> {
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
Text( 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, textAlign: TextAlign.center,
overflow: TextOverflow.visible, overflow: TextOverflow.visible,
style: TextStyle( style: TextStyle(

View File

@@ -36,11 +36,9 @@ class _MihBusinessUserSearchState extends State<MihBusinessUserSearch> {
void submitUserForm(MzansiProfileProvider profileProvider) { void submitUserForm(MzansiProfileProvider profileProvider) {
if (searchController.text != "") { if (searchController.text != "") {
setState(() { userSearch = searchController.text;
userSearch = searchController.text; hasSearchedBefore = true;
hasSearchedBefore = true; userSearchResults = fetchUsers(profileProvider, userSearch);
userSearchResults = fetchUsers(profileProvider, userSearch);
});
} }
} }
@@ -192,6 +190,7 @@ class _MihBusinessUserSearchState extends State<MihBusinessUserSearch> {
searchController.clear(); searchController.clear();
userSearch = ""; userSearch = "";
}); });
profileProvider.setUserearchResults(userSearchResults: []);
}, },
searchFocusNode: _searchFocusNode, 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_components/mih_objects/business_employee.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_profile/business_profile/builders/build_employee_list.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_business_employee_services.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class MihMyBusinessTeam extends StatefulWidget { class MihMyBusinessTeam extends StatefulWidget {
@@ -23,32 +22,11 @@ class _MihMyBusinessTeamState extends State<MihMyBusinessTeam> {
String errorCode = ""; String errorCode = "";
String errorBody = ""; String errorBody = "";
void getEmployeeData(MzansiProfileProvider mzansiProfileProvider) { // void getEmployeeData(MzansiProfileProvider mzansiProfileProvider) {
WidgetsBinding.instance.addPostFrameCallback((_) async { // WidgetsBinding.instance.addPostFrameCallback((_) async {
await MihBusinessEmployeeServices() // await MihBusinessEmployeeServices()
.fetchEmployees(mzansiProfileProvider, context); // .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');
// }
// } // }
Widget displayEmployeeList(List<BusinessEmployee> employeeList) { Widget displayEmployeeList(List<BusinessEmployee> employeeList) {
@@ -89,7 +67,6 @@ class _MihMyBusinessTeamState extends State<MihMyBusinessTeam> {
builder: (BuildContext context, builder: (BuildContext context,
MzansiProfileProvider mzansiProfileProvider, Widget? child) { MzansiProfileProvider mzansiProfileProvider, Widget? child) {
if (mzansiProfileProvider.employeeList == null) { if (mzansiProfileProvider.employeeList == null) {
getEmployeeData(mzansiProfileProvider);
return Center( return Center(
child: Mihloadingcircle(), child: Mihloadingcircle(),
); );

View File

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

View File

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