NEW: complete provider mzansi wallet

This commit is contained in:
2025-10-21 10:22:20 +02:00
parent 15106d0a00
commit c79904d132
10 changed files with 295 additions and 302 deletions

View File

@@ -276,8 +276,7 @@ class MihGoRouter {
path: MihGoRouterPaths.mzansiWallet, path: MihGoRouterPaths.mzansiWallet,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
KenLogger.success("MihGoRouter: mzansiWallet"); KenLogger.success("MihGoRouter: mzansiWallet");
final WalletArguments? args = state.extra as WalletArguments?; if (context.watch<MzansiProfileProvider>().business == null) {
if (args == null) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.go(MihGoRouterPaths.mihHome); context.go(MihGoRouterPaths.mihHome);
}); });
@@ -285,7 +284,6 @@ class MihGoRouter {
} }
return MihWallet( return MihWallet(
key: UniqueKey(), key: UniqueKey(),
arguments: args,
); );
}, },
), ),

View File

@@ -79,8 +79,6 @@ class _MihPersonalHomeState extends State<MihPersonalHome>
List<Map<String, Widget>> temp = []; List<Map<String, Widget>> temp = [];
temp.add({ temp.add({
"Setup Profile": MzansiSetupProfileTile( "Setup Profile": MzansiSetupProfileTile(
signedInUser: widget.signedInUser,
propicFile: widget.propicFile,
packageSize: packageSize, packageSize: packageSize,
) )
}); });
@@ -92,8 +90,6 @@ class _MihPersonalHomeState extends State<MihPersonalHome>
//=============== Mzansi Profile =============== //=============== Mzansi Profile ===============
temp.add({ temp.add({
"Mzansi Profile": MzansiProfileTile( "Mzansi Profile": MzansiProfileTile(
signedInUser: widget.signedInUser,
propicFile: widget.propicFile,
packageSize: packageSize, packageSize: packageSize,
) )
}); });

View File

@@ -2,20 +2,14 @@ import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/main.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_package_tile.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_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
class MzansiProfileTile extends StatefulWidget { class MzansiProfileTile extends StatefulWidget {
final AppUser signedInUser;
final ImageProvider<Object>? propicFile;
final double packageSize; final double packageSize;
const MzansiProfileTile({ const MzansiProfileTile({
super.key, super.key,
required this.signedInUser,
required this.propicFile,
required this.packageSize, required this.packageSize,
}); });
@@ -31,10 +25,6 @@ class _MzansiProfileTileState extends State<MzansiProfileTile> {
onTap: () { onTap: () {
context.goNamed( context.goNamed(
'mzansiProfileManage', 'mzansiProfileManage',
extra: AppProfileUpdateArguments(
widget.signedInUser,
widget.propicFile,
),
); );
}, },
appName: "Mzansi Profile", appName: "Mzansi Profile",

View File

@@ -2,20 +2,14 @@ import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/main.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_package_tile.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_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
class MzansiSetupProfileTile extends StatefulWidget { class MzansiSetupProfileTile extends StatefulWidget {
final AppUser signedInUser;
final ImageProvider<Object>? propicFile;
final double packageSize; final double packageSize;
const MzansiSetupProfileTile({ const MzansiSetupProfileTile({
super.key, super.key,
required this.signedInUser,
required this.propicFile,
required this.packageSize, required this.packageSize,
}); });
@@ -30,10 +24,6 @@ class _MzansiSetupProfileTileState extends State<MzansiSetupProfileTile> {
onTap: () { onTap: () {
context.goNamed( context.goNamed(
'mzansiProfileManage', 'mzansiProfileManage',
extra: AppProfileUpdateArguments(
widget.signedInUser,
widget.propicFile,
),
); );
}, },
appName: "Set Up Profile", appName: "Set Up Profile",

View File

@@ -7,6 +7,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
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_error_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_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_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
@@ -18,7 +19,6 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_card_display.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_card_display.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -27,7 +27,6 @@ import 'package:provider/provider.dart';
import 'package:screen_brightness/screen_brightness.dart'; import 'package:screen_brightness/screen_brightness.dart';
class BuildLoyaltyCardList extends StatefulWidget { class BuildLoyaltyCardList extends StatefulWidget {
final AppUser signedInUser;
final List<MIHLoyaltyCard> cardList; final List<MIHLoyaltyCard> cardList;
final int navIndex; final int navIndex;
final bool favouritesMode; final bool favouritesMode;
@@ -35,7 +34,6 @@ class BuildLoyaltyCardList extends StatefulWidget {
const BuildLoyaltyCardList({ const BuildLoyaltyCardList({
super.key, super.key,
required this.signedInUser,
required this.cardList, required this.cardList,
required this.navIndex, required this.navIndex,
required this.favouritesMode, required this.favouritesMode,
@@ -60,7 +58,8 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
); );
} }
void editCardWindow(BuildContext ctxt, int index, double width) { void editCardWindow(MzansiProfileProvider mzansiProfileProvider,
BuildContext ctxt, int index, double width) {
showDialog( showDialog(
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
@@ -145,7 +144,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
if (_formKey.currentState!.validate()) { if (_formKey.currentState!.validate()) {
int statusCode = await MIHMzansiWalletApis int statusCode = await MIHMzansiWalletApis
.updateLoyaltyCardAPICall( .updateLoyaltyCardAPICall(
widget.signedInUser, mzansiProfileProvider.user!,
widget.cardList[index].idloyalty_cards, widget.cardList[index].idloyalty_cards,
widget.cardList[index].shop_name, widget.cardList[index].shop_name,
widget.cardList[index].favourite, widget.cardList[index].favourite,
@@ -211,7 +210,8 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
); );
} }
void deleteCardWindow(BuildContext ctxt, int index) { void deleteCardWindow(MzansiProfileProvider mzansiProfileProvider,
BuildContext ctxt, int index) {
showDialog( showDialog(
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
@@ -221,7 +221,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
onTap: () async { onTap: () async {
int statusCode = int statusCode =
await MIHMzansiWalletApis.deleteLoyaltyCardAPICall( await MIHMzansiWalletApis.deleteLoyaltyCardAPICall(
widget.signedInUser, mzansiProfileProvider.user!,
widget.cardList[index].idloyalty_cards, widget.cardList[index].idloyalty_cards,
context, context,
); );
@@ -237,7 +237,8 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
); );
} }
void addToFavCardWindow(BuildContext ctxt, int index) { void addToFavCardWindow(MzansiProfileProvider mzansiProfileProvider,
BuildContext ctxt, int index) {
showDialog( showDialog(
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
@@ -269,7 +270,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
onPressed: () async { onPressed: () async {
int statusCode = int statusCode =
await MIHMzansiWalletApis.updateLoyaltyCardAPICall( await MIHMzansiWalletApis.updateLoyaltyCardAPICall(
widget.signedInUser, mzansiProfileProvider.user!,
widget.cardList[index].idloyalty_cards, widget.cardList[index].idloyalty_cards,
widget.cardList[index].shop_name, widget.cardList[index].shop_name,
"Yes", "Yes",
@@ -282,7 +283,9 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
context.pop(); context.pop();
context.pop(); context.pop();
await MIHMzansiWalletApis.getFavouriteLoyaltyCards( await MIHMzansiWalletApis.getFavouriteLoyaltyCards(
widget.signedInUser.app_id, context); mzansiProfileProvider.user!.app_id,
context,
);
context.read<MzansiWalletProvider>().setToolIndex(1); context.read<MzansiWalletProvider>().setToolIndex(1);
} else { } else {
internetConnectionPopUp(); internetConnectionPopUp();
@@ -319,7 +322,8 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
); );
} }
void removeFromFavCardWindow(BuildContext ctxt, int index) { void removeFromFavCardWindow(MzansiProfileProvider mzansiProfileProvider,
BuildContext ctxt, int index) {
showDialog( showDialog(
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
@@ -351,7 +355,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
onPressed: () async { onPressed: () async {
int statusCode = int statusCode =
await MIHMzansiWalletApis.updateLoyaltyCardAPICall( await MIHMzansiWalletApis.updateLoyaltyCardAPICall(
widget.signedInUser, mzansiProfileProvider.user!,
widget.cardList[index].idloyalty_cards, widget.cardList[index].idloyalty_cards,
widget.cardList[index].shop_name, widget.cardList[index].shop_name,
"", "",
@@ -364,7 +368,9 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
context.pop(); context.pop();
context.pop(); context.pop();
await MIHMzansiWalletApis.getFavouriteLoyaltyCards( await MIHMzansiWalletApis.getFavouriteLoyaltyCards(
widget.signedInUser.app_id, context); mzansiProfileProvider.user!.app_id,
context,
);
context.read<MzansiWalletProvider>().setToolIndex(0); context.read<MzansiWalletProvider>().setToolIndex(0);
} else { } else {
internetConnectionPopUp(); internetConnectionPopUp();
@@ -390,7 +396,8 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
); );
} }
void viewCardWindow(int index, double width) { void viewCardWindow(
MzansiProfileProvider mzansiProfileProvider, int index, double width) {
//print(widget.cardList[index].card_number); //print(widget.cardList[index].card_number);
String formattedCardNumber = ""; String formattedCardNumber = "";
for (int i = 0; i <= widget.cardList[index].card_number.length - 1; i++) { for (int i = 0; i <= widget.cardList[index].card_number.length - 1; i++) {
@@ -432,9 +439,17 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
onTap: () { onTap: () {
if (widget.cardList[index].favourite == "") { if (widget.cardList[index].favourite == "") {
addToFavCardWindow(context, index); addToFavCardWindow(
mzansiProfileProvider,
context,
index,
);
} else { } else {
removeFromFavCardWindow(context, index); removeFromFavCardWindow(
mzansiProfileProvider,
context,
index,
);
} }
}, },
), ),
@@ -459,7 +474,12 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
_cardNumberController.text = widget.cardList[index].card_number; _cardNumberController.text = widget.cardList[index].card_number;
_nicknameController.text = widget.cardList[index].nickname; _nicknameController.text = widget.cardList[index].nickname;
}); });
editCardWindow(context, index, width); editCardWindow(
mzansiProfileProvider,
context,
index,
width,
);
}, },
), ),
SpeedDialChild( SpeedDialChild(
@@ -479,7 +499,11 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
backgroundColor: MihColors.getGreenColor( backgroundColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
onTap: () { onTap: () {
deleteCardWindow(context, index); deleteCardWindow(
mzansiProfileProvider,
context,
index,
);
}, },
), ),
], ],
@@ -681,29 +705,38 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
// final double width = size.width; // final double width = size.width;
//final double height = size.height; //final double height = size.height;
if (widget.cardList.isNotEmpty) { if (widget.cardList.isNotEmpty) {
return GridView.builder( return Consumer<MzansiProfileProvider>(
physics: const NeverScrollableScrollPhysics(), builder: (BuildContext context,
shrinkWrap: true, MzansiProfileProvider mzansiProfileProvider, Widget? child) {
padding: EdgeInsets.only( return GridView.builder(
left: getHorizontalPaddingSize(size), physics: const NeverScrollableScrollPhysics(),
right: getHorizontalPaddingSize(size), shrinkWrap: true,
), padding: EdgeInsets.only(
itemCount: widget.cardList.length, left: getHorizontalPaddingSize(size),
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( right: getHorizontalPaddingSize(size),
mainAxisSpacing: 0,
crossAxisSpacing: 5,
maxCrossAxisExtent: 200,
),
itemBuilder: (context, index) {
return GestureDetector(
child: MihCardDisplay(
shopName: widget.cardList[index].shop_name,
nickname: widget.cardList[index].nickname,
height: 100,
), ),
onTap: () { itemCount: widget.cardList.length,
setScreenBrightness(1.0); gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
viewCardWindow(index, size.width); mainAxisSpacing: 0,
crossAxisSpacing: 5,
maxCrossAxisExtent: 200,
),
itemBuilder: (context, index) {
return GestureDetector(
child: MihCardDisplay(
shopName: widget.cardList[index].shop_name,
nickname: widget.cardList[index].nickname,
height: 100,
),
onTap: () {
setScreenBrightness(1.0);
viewCardWindow(
mzansiProfileProvider,
index,
size.width,
);
},
);
}, },
); );
}, },

View File

@@ -2,8 +2,6 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:ken_logger/ken_logger.dart'; import 'package:ken_logger/ken_logger.dart';
import 'package:mzansi_innovation_hub/main.dart'; 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_package_components/mih_button.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_dropdwn_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart';
@@ -11,18 +9,17 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.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_wallet/components/mih_card_display.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_card_display.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart';
import 'package:provider/provider.dart';
class MihAddCardWindow extends StatefulWidget { class MihAddCardWindow extends StatefulWidget {
final AppUser signedInUser;
const MihAddCardWindow({ const MihAddCardWindow({
super.key, super.key,
required this.signedInUser,
}); });
@override @override
@@ -77,7 +74,6 @@ class _MihAddCardWindowState extends State<MihAddCardWindow> {
context.pop(); context.pop();
context.goNamed( context.goNamed(
'mzansiWallet', 'mzansiWallet',
extra: WalletArguments(widget.signedInUser, 0),
); );
}, },
buttonColor: MihColors.getGreenColor( buttonColor: MihColors.getGreenColor(
@@ -145,207 +141,217 @@ class _MihAddCardWindowState extends State<MihAddCardWindow> {
padding: MzansiInnovationHub.of(context)!.theme.screenType == "desktop" padding: MzansiInnovationHub.of(context)!.theme.screenType == "desktop"
? EdgeInsets.symmetric(horizontal: width * 0.05) ? EdgeInsets.symmetric(horizontal: width * 0.05)
: EdgeInsets.symmetric(horizontal: width * 0), : EdgeInsets.symmetric(horizontal: width * 0),
child: Column( child: Consumer<MzansiProfileProvider>(
children: [ builder: (BuildContext context,
MihForm( MzansiProfileProvider mzansiProfileProvider, Widget? child) {
formKey: _formKey, return Column(
formFields: [ children: [
MihDropdownField( MihForm(
controller: _shopController, formKey: _formKey,
hintText: "Shop Name", formFields: [
editable: true, MihDropdownField(
enableSearch: true, controller: _shopController,
validator: (value) { hintText: "Shop Name",
return MihValidationServices().isEmpty(value); editable: true,
}, enableSearch: true,
requiredText: true, validator: (value) {
dropdownOptions: const [ return MihValidationServices().isEmpty(value);
"+More", },
"Apple Tree", requiredText: true,
"+More", dropdownOptions: const [
"Apple Tree", "+More",
"Auchan", "Apple Tree",
"Best Before", "+More",
"Big Save", "Apple Tree",
"Boxer", "Auchan",
"BP", "Best Before",
"Builders Warehouse", "Big Save",
"Checkers", "Boxer",
"Choppies", "BP",
"Clicks", "Builders Warehouse",
"Continente", "Checkers",
"Cotton:On", "Choppies",
"Carrefour", "Clicks",
"Dis-Chem", "Continente",
"Edgars", "Cotton:On",
"Engen", "Carrefour",
"Eskom", "Dis-Chem",
"Exclusive Books", "Edgars",
"Fresh Stop", "Engen",
"Fresmart", "Eskom",
"Infinity", "Exclusive Books",
"Jet", "Fresh Stop",
"Justrite", "Fresmart",
"Kero", "Infinity",
"Leroy Merlin", "Jet",
"Makro", "Justrite",
"Naivas", "Kero",
"OK Foods", "Leroy Merlin",
"Panarottis", "Makro",
"Pick n Pay", "Naivas",
"PnA", "OK Foods",
"PQ Clothing", "Panarottis",
"Rage", "Pick n Pay",
"Sefalana", "PnA",
"Sasol", "PQ Clothing",
"Shell", "Rage",
"Shoprite", "Sefalana",
"Signature Cosmetics & Fragrances", "Sasol",
"Spar", "Shell",
"Spur", "Shoprite",
"TFG Group", "Signature Cosmetics & Fragrances",
"Total Energies", "Spar",
"Toys R Us", "Spur",
"Woermann Brock", "TFG Group",
"Woolworths" "Total Energies",
], "Toys R Us",
), "Woermann Brock",
ValueListenableBuilder( "Woolworths"
valueListenable: _shopName, ],
builder: (BuildContext context, String value, Widget? child) {
return Visibility(
visible: value != "",
child: Column(
children: [
const SizedBox(height: 10),
MihCardDisplay(
shopName: _shopName.value,
nickname: "",
height: 200),
],
),
);
},
),
const SizedBox(height: 10),
MihTextFormField(
fillColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
inputColor: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
controller: _nicknameController,
multiLineInput: false,
requiredText: false,
hintText: "Card Title",
),
const SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisSize: MainAxisSize.max,
children: [
Flexible(
child: MihTextFormField(
fillColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
inputColor: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
controller: _cardNumberController,
multiLineInput: false,
requiredText: true,
hintText: "Card Number",
numberMode: true,
validator: (value) {
return MihValidationServices().isEmpty(value);
},
),
), ),
const SizedBox(width: 20), ValueListenableBuilder(
MihButton( valueListenable: _shopName,
onPressed: () { builder:
context.pushNamed( (BuildContext context, String value, Widget? child) {
"barcodeScanner", return Visibility(
extra: _cardNumberController, // Use local controller visible: value != "",
child: Column(
children: [
const SizedBox(height: 10),
MihCardDisplay(
shopName: _shopName.value,
nickname: "",
height: 200),
],
),
); );
}, },
buttonColor: MihColors.getSecondaryColor( ),
const SizedBox(height: 10),
MihTextFormField(
fillColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"), "Dark"),
width: 100, inputColor: MihColors.getPrimaryColor(
child: Text( MzansiInnovationHub.of(context)!.theme.mode ==
"Scan", "Dark"),
style: TextStyle( controller: _nicknameController,
color: MihColors.getPrimaryColor( multiLineInput: false,
requiredText: false,
hintText: "Card Title",
),
const SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisSize: MainAxisSize.max,
children: [
Flexible(
child: MihTextFormField(
fillColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
inputColor: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
controller: _cardNumberController,
multiLineInput: false,
requiredText: true,
hintText: "Card Number",
numberMode: true,
validator: (value) {
return MihValidationServices().isEmpty(value);
},
),
),
const SizedBox(width: 20),
MihButton(
onPressed: () {
context.pushNamed(
"barcodeScanner",
extra:
_cardNumberController, // Use local controller
);
},
buttonColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"), "Dark"),
fontSize: 20, width: 100,
fontWeight: FontWeight.bold, child: Text(
"Scan",
style: TextStyle(
color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
],
),
const SizedBox(height: 15),
Center(
child: MihButton(
onPressed: () async {
if (_formKey.currentState!.validate()) {
if (_shopController.text == "") {
showDialog(
context: context,
builder: (context) {
return const MIHErrorMessage(
errorType: "Input Error");
},
);
} else {
int statusCode = await MIHMzansiWalletApis
.addLoyaltyCardAPICall(
mzansiProfileProvider.user!,
mzansiProfileProvider.user!.app_id,
_shopController.text,
_cardNumberController.text,
"",
0,
_nicknameController.text,
context,
);
if (statusCode == 201) {
context.pop();
KenLogger.error("Card Added Successfully");
successPopUp(
"Successfully Added Card",
"The loyalty card has been added to your favourites.",
0,
);
} else {
internetConnectionPopUp();
}
}
} else {
MihAlertServices().formNotFilledCompletely(context);
}
},
buttonColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
width: 300,
child: Text(
"Add",
style: TextStyle(
color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
fontSize: 20,
fontWeight: FontWeight.bold,
),
), ),
), ),
), ),
], ],
), ),
const SizedBox(height: 15),
Center(
child: MihButton(
onPressed: () async {
if (_formKey.currentState!.validate()) {
if (_shopController.text == "") {
showDialog(
context: context,
builder: (context) {
return const MIHErrorMessage(
errorType: "Input Error");
},
);
} else {
int statusCode =
await MIHMzansiWalletApis.addLoyaltyCardAPICall(
widget.signedInUser,
widget.signedInUser.app_id,
_shopController.text,
_cardNumberController.text,
"",
0,
_nicknameController.text,
context,
);
if (statusCode == 201) {
context.pop();
KenLogger.error("Card Added Successfully");
successPopUp(
"Successfully Added Card",
"The loyalty card has been added to your favourites.",
0,
);
} else {
internetConnectionPopUp();
}
}
} else {
MihAlertServices().formNotFilledCompletely(context);
}
},
buttonColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
width: 300,
child: Text(
"Add",
style: TextStyle(
color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
], ],
), );
], },
), ),
), ),
); );

View File

@@ -2,9 +2,9 @@ import 'package:go_router/go_router.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_objects/arguments.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/mih_banner_ad_provider.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart';
@@ -13,10 +13,8 @@ import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.da
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class MihWallet extends StatefulWidget { class MihWallet extends StatefulWidget {
final WalletArguments arguments;
const MihWallet({ const MihWallet({
super.key, super.key,
required this.arguments,
}); });
@override @override
@@ -26,29 +24,25 @@ class MihWallet extends StatefulWidget {
class _MihWalletState extends State<MihWallet> { class _MihWalletState extends State<MihWallet> {
bool isLoading = true; bool isLoading = true;
void setPackageIndex() { Future<void> setLoyaltyCards(
if (widget.arguments.index >= 0 && widget.arguments.index <= 3) { MzansiProfileProvider mzansiProfileProvider) async {
context.read<MzansiWalletProvider>().setToolIndex(widget.arguments.index);
}
}
Future<void> setLoyaltyCards() async {
await MIHMzansiWalletApis.getLoyaltyCards( await MIHMzansiWalletApis.getLoyaltyCards(
widget.arguments.signedInUser.app_id, context); mzansiProfileProvider.user!.app_id, context);
} }
Future<void> setFavouritesCards() async { Future<void> setFavouritesCards(
MzansiProfileProvider mzansiProfileProvider) async {
await MIHMzansiWalletApis.getFavouriteLoyaltyCards( await MIHMzansiWalletApis.getFavouriteLoyaltyCards(
widget.arguments.signedInUser.app_id, context); mzansiProfileProvider.user!.app_id, context);
} }
@override @override
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async { WidgetsBinding.instance.addPostFrameCallback((_) async {
setPackageIndex(); var mzansiProfileProvider = context.read<MzansiProfileProvider>();
await setLoyaltyCards(); await setLoyaltyCards(mzansiProfileProvider);
await setFavouritesCards(); await setFavouritesCards(mzansiProfileProvider);
context.read<MihBannerAdProvider>().loadBannerAd(); context.read<MihBannerAdProvider>().loadBannerAd();
setState(() { setState(() {
isLoading = false; isLoading = false;
@@ -104,12 +98,8 @@ class _MihWalletState extends State<MihWallet> {
List<Widget> getToolBody() { List<Widget> getToolBody() {
List<Widget> toolBodies = [ List<Widget> toolBodies = [
MihCards( MihCards(),
signedInUser: widget.arguments.signedInUser, MihCardFavourites(),
),
MihCardFavourites(
signedInUser: widget.arguments.signedInUser,
),
]; ];
if (isLoading) { if (isLoading) {
return [ return [

View File

@@ -2,16 +2,13 @@ import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.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_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_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class MihCardFavourites extends StatefulWidget { class MihCardFavourites extends StatefulWidget {
final AppUser signedInUser;
const MihCardFavourites({ const MihCardFavourites({
super.key, super.key,
required this.signedInUser,
}); });
@override @override
@@ -50,7 +47,6 @@ class _MihCardFavouritesState extends State<MihCardFavourites> {
children: [ children: [
BuildLoyaltyCardList( BuildLoyaltyCardList(
cardList: listOfCards, cardList: listOfCards,
signedInUser: widget.signedInUser,
navIndex: 0, navIndex: 0,
favouritesMode: true, favouritesMode: true,
searchText: TextEditingController(), searchText: TextEditingController(),

View File

@@ -11,7 +11,6 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -19,10 +18,8 @@ import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class MihCards extends StatefulWidget { class MihCards extends StatefulWidget {
final AppUser signedInUser;
const MihCards({ const MihCards({
super.key, super.key,
required this.signedInUser,
}); });
@override @override
@@ -127,9 +124,7 @@ class _MihCardsState extends State<MihCards> {
showDialog( showDialog(
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
builder: (context) => MihAddCardWindow( builder: (context) => MihAddCardWindow(),
signedInUser: widget.signedInUser,
),
); );
} }
@@ -198,7 +193,6 @@ class _MihCardsState extends State<MihCards> {
builder: (context, filteredCards, child) { builder: (context, filteredCards, child) {
return BuildLoyaltyCardList( return BuildLoyaltyCardList(
cardList: filteredCards, //listOfCards, cardList: filteredCards, //listOfCards,
signedInUser: widget.signedInUser,
navIndex: 0, navIndex: 0,
favouritesMode: false, favouritesMode: false,
searchText: cardSearchController, searchText: cardSearchController,

View File

@@ -171,14 +171,14 @@ services:
networks: networks:
- MIH-network - MIH-network
# === Added section for NVIDIA GPU acceleration === # === Added section for NVIDIA GPU acceleration ===
runtime: nvidia # runtime: nvidia
deploy: # deploy:
resources: # resources:
reservations: # reservations:
devices: # devices:
- driver: nvidia # - driver: nvidia
count: all # or specify a number of GPUs # count: all # or specify a number of GPUs
capabilities: [ gpu ] # capabilities: [ gpu ]
#============== Firebaase ==================================================================== #============== Firebaase ====================================================================
# firebase: # firebase:
# container_name: MIH-firebase-emulator # container_name: MIH-firebase-emulator