Merge pull request #252 from yaso-meth/BUG--Testing-fixes

BUG--Testing-fixes
This commit is contained in:
yaso-meth
2025-09-15 11:40:46 +02:00
committed by GitHub
17 changed files with 226 additions and 1627 deletions

View File

@@ -221,10 +221,12 @@ class WalletArguments {
class MzansiAiArguments {
final AppUser signedInUser;
final String? startUpQuestion;
final bool personalSelected;
MzansiAiArguments(
this.signedInUser,
this.startUpQuestion,
this.personalSelected,
);
}
@@ -240,6 +242,16 @@ class MzansiDirectoryArguments {
});
}
class AboutArguments {
final bool personalSelected;
final int? packageIndex;
AboutArguments(
this.personalSelected,
this.packageIndex,
);
}
class TestArguments {
final AppUser user;
final Business? business;

View File

@@ -12,6 +12,7 @@ import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/mih_auth_f
import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/mih_auth_password_reset.dart';
import 'package:mzansi_innovation_hub/mih_packages/mih_authentication/mih_authentication.dart';
import 'package:mzansi_innovation_hub/mih_packages/mih_home/mih_home.dart';
import 'package:mzansi_innovation_hub/mih_packages/mih_home/mih_route_error.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';
@@ -149,12 +150,14 @@ class MihGoRouter {
path: MihGoRouterPaths.aboutMih,
builder: (BuildContext context, GoRouterState state) {
KenLogger.success("MihGoRouter: aboutMih");
final int? packageIndex = state.extra as int?;
final AboutArguments? args = state.extra as AboutArguments?;
int index = 0;
if (packageIndex != null) {
index = packageIndex;
bool personalSelected = true;
if (args != null) {
index = args.packageIndex ?? 0;
personalSelected = args.personalSelected;
}
return AboutMih(packageIndex: index);
return AboutMih(arguments: AboutArguments(personalSelected, index));
},
),
// ========================== Mzansi Profile Personal ==================================
@@ -473,7 +476,7 @@ class MihGoRouter {
// 3. Error handling with `errorBuilder` and `redirect`
errorBuilder: (BuildContext context, GoRouterState state) {
KenLogger.error('Invalid Route');
return const Placeholder();
return const MihRouteError();
},
);
}

View File

@@ -1,4 +1,5 @@
import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.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';
@@ -9,10 +10,10 @@ import 'package:mzansi_innovation_hub/mih_packages/about_mih/package_tools/mih_t
import 'package:flutter/material.dart';
class AboutMih extends StatefulWidget {
final int? packageIndex;
final AboutArguments? arguments;
const AboutMih({
super.key,
this.packageIndex,
this.arguments,
});
@override
@@ -21,15 +22,18 @@ class AboutMih extends StatefulWidget {
class _AboutMihState extends State<AboutMih> {
late int _selcetedIndex;
late bool _personalSelected;
@override
void initState() {
super.initState();
setState(() {
if (widget.packageIndex == null) {
if (widget.arguments == null) {
_selcetedIndex = 0;
_personalSelected = true;
} else {
_selcetedIndex = widget.packageIndex!;
_selcetedIndex = widget.arguments!.packageIndex!;
_personalSelected = widget.arguments!.personalSelected;
}
});
}
@@ -58,7 +62,7 @@ class _AboutMihState extends State<AboutMih> {
onTap: () {
context.goNamed(
'mihHome',
extra: true,
extra: _personalSelected,
);
FocusScope.of(context).unfocus();
},

View File

@@ -1,5 +1,6 @@
import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart';
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
@@ -7,9 +8,11 @@ import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
class AboutMihTile extends StatefulWidget {
final double packageSize;
final bool personalSelected;
const AboutMihTile({
super.key,
required this.packageSize,
required this.personalSelected,
});
@override
@@ -23,7 +26,10 @@ class _AboutMihTileState extends State<AboutMihTile> {
onTap: () {
context.goNamed(
"aboutMih",
extra: 0,
extra: AboutArguments(
widget.personalSelected,
0,
),
);
// Navigator.of(context).pushNamed(
// '/about',

View File

@@ -45,7 +45,7 @@ class _MzansiCalendarState extends State<MzansiCalendar> {
// Navigator.of(context).pop();
context.goNamed(
'mihHome',
extra: true,
extra: widget.arguments.personalSelected,
);
FocusScope.of(context).unfocus();
},

View File

@@ -91,8 +91,8 @@ class _MihHomeState extends State<MihHome> {
if (asyncSnapshot.connectionState == ConnectionState.waiting) {
return Scaffold(
body: const Mihloadingcircle(
message: "Fetching your Data...",
),
// message: "Fetching your Data...",
),
);
} else if (asyncSnapshot.connectionState == ConnectionState.done &&
asyncSnapshot.hasData) {

File diff suppressed because it is too large Load Diff

View File

@@ -1,281 +0,0 @@
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.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.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_config/mih_colors.dart';
import 'package:mzansi_innovation_hub/mih_packages/mih_home/mih_home.dart';
import 'package:flutter/material.dart';
import '../../mih_services/mih_service_calls.dart';
import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import '../../mih_config/mih_env.dart';
class MIHProfileGetter extends StatefulWidget {
final bool personalSelected;
const MIHProfileGetter({
super.key,
required this.personalSelected,
});
@override
State<MIHProfileGetter> createState() => _MIHProfileGetterState();
}
class _MIHProfileGetterState extends State<MIHProfileGetter> {
String useremail = "";
int amount = 10;
final baseAPI = AppEnviroment.baseApiUrl;
late Future<HomeArguments> profile;
String proPicUrl = "empty";
ImageProvider<Object>? propicFile;
int _selcetedIndex = 0;
bool isUserNew(AppUser signedInUser) {
if (signedInUser.fname == "") {
return true;
} else {
return false;
}
}
bool isDevActive() {
if (AppEnviroment.getEnv() == "Dev") {
return true;
} else {
return false;
}
}
bool isBusinessUser(AppUser signedInUser) {
if (signedInUser.type == "personal") {
return false;
} else {
return true;
}
}
bool isBusinessUserNew(BusinessUser? businessUser) {
if (businessUser == null) {
return true;
} else {
return false;
}
}
MihPackageTools getErrorTools() {
Map<Widget, void Function()?> temp = {};
temp[const Icon(Icons.power_off_outlined)] = () {
setState(() {
_selcetedIndex = 0;
});
};
return MihPackageTools(
tools: temp,
selcetedIndex: _selcetedIndex,
);
}
List<Widget> getErrorToolBody(String error) {
List<Widget> toolBodies = [
MihPackageToolBody(
borderOn: true,
bodyItem: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"Connection Error",
textAlign: TextAlign.center,
style: TextStyle(
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 35,
fontWeight: FontWeight.bold,
),
),
Icon(
Icons.power_off_outlined,
size: 150,
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
),
SizedBox(
width: 500,
child: Text(
"Looks like we ran into an issue getting your data.\nPlease check you internet connection and try again.",
textAlign: TextAlign.center,
style: TextStyle(
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
const SizedBox(height: 15),
MihButton(
onPressed: () {
Navigator.of(context).popAndPushNamed("/");
},
buttonColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
width: 300,
child: Text(
"Refresh",
style: TextStyle(
color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
const SizedBox(height: 15),
Padding(
padding: const EdgeInsets.all(10.0),
child: SizedBox(
width: 500,
child: SelectionArea(
child: Text(
"Error: $error",
textAlign: TextAlign.left,
style: TextStyle(
color: MihColors.getRedColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
fontSize: 15,
fontWeight: FontWeight.bold,
),
),
),
),
),
],
),
)
];
return toolBodies;
}
Widget errorPage(String error) {
return MihPackage(
appActionButton: MihPackageAction(
icon: const Icon(Icons.refresh),
iconSize: 35,
onTap: () {
Navigator.of(context).popAndPushNamed("/");
},
),
appTools: getErrorTools(),
appBody: getErrorToolBody(error),
selectedbodyIndex: _selcetedIndex,
onIndexChange: (newValue) {
setState(() {
_selcetedIndex = newValue;
});
//print("Index: $_selcetedIndex");
},
);
// return MIHLayoutBuilder(
// actionButton: MIHAction(
// icon: const Icon(Icons.refresh),
// iconSize: 35,
// onTap: () {
// Navigator.of(context).popAndPushNamed("/");
// },
// ),
// header: const MIHHeader(
// headerAlignment: MainAxisAlignment.center,
// headerItems: [
// Text(
// "Mzanzi Innovation Hub",
// style: TextStyle(
// fontWeight: FontWeight.bold,
// fontSize: 20,
// ),
// ),
// ],
// ),
// secondaryActionButton: null,
// body: MIHBody(
// borderOn: false,
// bodyItems: [
// Align(
// alignment: Alignment.center,
// child: Text(
// '$error occurred',
// style: const TextStyle(fontSize: 18),
// ),
// ),
// ],
// ),
// actionDrawer: null,
// secondaryActionDrawer: null,
// bottomNavBar: null,
// pullDownToRefresh: false,
// onPullDown: () async {},
// );
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
@override
void initState() {
//profile = getProfile();
profile = MIHApiCalls().getProfile(amount, context);
super.initState();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: profile,
builder: (BuildContext context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData) {
return MihHome(
// signedInUser: snapshot.requireData.signedInUser,
// businessUser: snapshot.data!.businessUser,
// business: snapshot.data!.business,
// patient: snapshot.data!.patient,
// notifications: snapshot.data!.notifi,
// propicFile: snapshot.data!.profilePicUrl != ""
// ? NetworkImage(snapshot.data!.profilePicUrl)
// : null,
// isUserNew: isUserNew(snapshot.requireData.signedInUser),
// isBusinessUser: isBusinessUser(snapshot.requireData.signedInUser),
// isBusinessUserNew: isBusinessUserNew(snapshot.data!.businessUser),
// isDevActive: isDevActive(),
personalSelected: widget.personalSelected,
);
// return MIHHomeLegacy(
// signedInUser: snapshot.requireData.signedInUser,
// businessUser: snapshot.data!.businessUser,
// business: snapshot.data!.business,
// patient: snapshot.data!.patient,
// notifications: snapshot.data!.notifi,
// propicFile: isPictureAvailable(snapshot.data!.profilePicUrl),
// isUserNew: isUserNew(snapshot.requireData.signedInUser),
// isBusinessUser: isBusinessUser(snapshot.requireData.signedInUser),
// isBusinessUserNew: isBusinessUserNew(snapshot.data!.businessUser),
// isDevActive: isDevActive(),
// personalSelected: widget.personalSelected,
// );
} else {
return errorPage(snapshot.error.toString());
}
}
return const Mihloadingcircle();
},
);
}
}

View File

@@ -0,0 +1,149 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.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_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_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
class MihRouteError extends StatefulWidget {
const MihRouteError({
super.key,
});
@override
State<MihRouteError> createState() => _MihRouteErrorState();
}
class _MihRouteErrorState extends State<MihRouteError> {
int _selcetedIndex = 0;
@override
Widget build(BuildContext context) {
return MihPackage(
appActionButton: getErrorAction(),
appTools: getErrorTools(),
appBody: getErrorToolBody(),
selectedbodyIndex: _selcetedIndex,
onIndexChange: (newValue) {
setState(() {
_selcetedIndex = newValue;
});
//print("Index: $_selcetedIndex");
},
);
}
MihPackageAction getErrorAction() {
return MihPackageAction(
icon: const Icon(MihIcons.mihLogo),
iconSize: 35,
onTap: () {
context.goNamed(
'mihHome',
extra: true,
);
},
);
}
MihPackageTools getErrorTools() {
Map<Widget, void Function()?> temp = {};
temp[const Icon(Icons.link_off_rounded)] = () {
setState(() {
_selcetedIndex = 0;
});
};
return MihPackageTools(
tools: temp,
selcetedIndex: _selcetedIndex,
);
}
List<Widget> getErrorToolBody() {
List<Widget> toolBodies = [
MihPackageToolBody(
borderOn: true,
bodyItem: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"Oops! Wrong Turn.",
textAlign: TextAlign.center,
style: TextStyle(
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 35,
fontWeight: FontWeight.bold,
),
),
Icon(
Icons.link_off_rounded,
size: 150,
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
),
SizedBox(
width: 700,
child: Text(
"It looks like you've taken a wrong turn and ended up on a package that doesn't exist within the MIH App.\n\nDon't worry, getting back is easy. Just click the button below or the MIH Logo to return to the correct path.",
textAlign: TextAlign.center,
style: TextStyle(
color: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 20,
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 15),
MihButton(
onPressed: () {
context.goNamed(
'mihHome',
extra: true,
);
},
buttonColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
width: 300,
child: Text(
"Back to MIH",
style: TextStyle(
color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
// const SizedBox(height: 15),
// Padding(
// padding: const EdgeInsets.all(10.0),
// child: SizedBox(
// width: 500,
// child: SelectionArea(
// child: Text(
// "Error: $error",
// textAlign: TextAlign.left,
// style: TextStyle(
// color: MihColors.getRedColor(
// MzansiInnovationHub.of(context)!.theme.mode ==
// "Dark"),
// fontSize: 15,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// ),
// ),
],
),
)
];
return toolBodies;
}
}

View File

@@ -118,6 +118,7 @@ class _MihBusinessHomeState extends State<MihBusinessHome>
temp.add({
"Mzansi Directory": MzansiDirectoryTile(
packageSize: packageSize,
personalSelected: false,
)
});
//=============== Calculator ===============
@@ -130,12 +131,21 @@ class _MihBusinessHomeState extends State<MihBusinessHome>
//=============== Mzansi AI ===============
temp.add({
"Mzansi AI": MzansiAiTile(
signedInUser: widget.signedInUser,
arguments: MzansiAiArguments(
widget.signedInUser,
"",
false,
),
packageSize: packageSize,
)
});
//=============== About MIH ===============
temp.add({"About MIH": AboutMihTile(packageSize: packageSize)});
temp.add({
"About MIH": AboutMihTile(
packageSize: packageSize,
personalSelected: false,
)
});
return temp;
}
@@ -252,6 +262,7 @@ class _MihBusinessHomeState extends State<MihBusinessHome>
searchController.text.isEmpty
? null
: searchController.text,
false,
),
);
// Navigator.of(context).pushNamed(

View File

@@ -120,6 +120,7 @@ class _MihPersonalHomeState extends State<MihPersonalHome>
temp.add({
"Mzansi Directory": MzansiDirectoryTile(
packageSize: packageSize,
personalSelected: true,
)
});
//=============== Calendar ===============
@@ -137,7 +138,11 @@ class _MihPersonalHomeState extends State<MihPersonalHome>
//=============== Mzansi AI ===============
temp.add({
"Mzansi AI": MzansiAiTile(
signedInUser: widget.signedInUser,
arguments: MzansiAiArguments(
widget.signedInUser,
"",
true,
),
packageSize: packageSize,
)
});
@@ -156,7 +161,12 @@ class _MihPersonalHomeState extends State<MihPersonalHome>
)
});
//=============== About MIH ===============
temp.add({"About MIH": AboutMihTile(packageSize: packageSize)});
temp.add({
"About MIH": AboutMihTile(
packageSize: packageSize,
personalSelected: true,
)
});
//=============== Dev ===============
if (widget.isDevActive) {
temp.add({
@@ -290,6 +300,7 @@ class _MihPersonalHomeState extends State<MihPersonalHome>
searchController.text.isEmpty
? null
: searchController.text,
true,
),
);
// Navigator.of(context).pushNamed(

View File

@@ -31,7 +31,7 @@ class _MzansiAiState extends State<MzansiAi> {
onTap: () {
context.goNamed(
'mihHome',
extra: true,
extra: widget.arguments.personalSelected,
);
FocusScope.of(context).unfocus();
},

View File

@@ -2,18 +2,17 @@ import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
class MzansiAiTile extends StatefulWidget {
final AppUser signedInUser;
final MzansiAiArguments arguments;
final double packageSize;
const MzansiAiTile({
super.key,
required this.signedInUser,
required this.arguments,
required this.packageSize,
});
@@ -28,10 +27,7 @@ class _MzansiAiTileState extends State<MzansiAiTile> {
onTap: () {
context.goNamed(
'mzansiAi',
extra: MzansiAiArguments(
widget.signedInUser,
"",
),
extra: widget.arguments,
);
// Navigator.of(context).pushNamed(
// '/mzansi-ai',

View File

@@ -100,7 +100,7 @@ class _MzansiDirectoryState extends State<MzansiDirectory> {
onTap: () {
context.goNamed(
'mihHome',
extra: true,
extra: widget.arguments.personalSearch,
);
FocusScope.of(context).unfocus();
},

View File

@@ -8,9 +8,11 @@ import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
class MzansiDirectoryTile extends StatefulWidget {
final double packageSize;
final bool personalSelected;
const MzansiDirectoryTile({
super.key,
required this.packageSize,
required this.personalSelected,
});
@override
@@ -25,7 +27,7 @@ class _MzansiDirectoryTileState extends State<MzansiDirectoryTile> {
context.goNamed(
"mzansiDirectory",
extra: MzansiDirectoryArguments(
personalSearch: true,
personalSearch: widget.personalSelected,
startSearchText: null,
),
);

View File

@@ -116,6 +116,9 @@ class _MihCardsState extends State<MihCards> {
Center(
child: MihButton(
onPressed: () {
shopController.clear();
_nicknameController.clear();
cardNumberController.clear();
context.pop();
},
buttonColor: MihColors.getGreenColor(

View File

@@ -1,7 +1,7 @@
name: mzansi_innovation_hub
description: ""
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.2.0+95
version: 1.2.0+96
environment:
sdk: '>=3.5.3 <4.0.0'