NEW: Mzansi Wallet Provider Setup

This commit is contained in:
2025-10-08 13:35:47 +02:00
parent 0edbfadc90
commit 7373a1b8cb
8 changed files with 215 additions and 166 deletions

View File

@@ -0,0 +1,48 @@
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.dart';
class MzansiWalletProvider extends ChangeNotifier {
List<MIHLoyaltyCard> loyaltyCards;
List<MIHLoyaltyCard> favouriteCards;
int toolIndex;
MzansiWalletProvider({
this.loyaltyCards = const [],
this.favouriteCards = const [],
this.toolIndex = 0,
});
void setToolIndex(int index) {
toolIndex = index;
notifyListeners();
}
void setLoyaltyCards({required List<MIHLoyaltyCard> cards}) async {
loyaltyCards = cards;
notifyListeners();
}
void setFavouriteCards({required List<MIHLoyaltyCard> cards}) async {
favouriteCards = cards;
notifyListeners();
}
void addLoyaltyCard({required MIHLoyaltyCard newCard}) {
loyaltyCards.add(newCard);
notifyListeners();
}
void deleteLoyaltyCard({required int cardId}) {
loyaltyCards.removeWhere((card) => card.idloyalty_cards == cardId);
notifyListeners();
}
void editLoyaltyCard({required MIHLoyaltyCard updatedCard}) {
int index = loyaltyCards.indexWhere(
(card) => card.idloyalty_cards == updatedCard.idloyalty_cards);
if (index != -1) {
loyaltyCards[index] = updatedCard;
notifyListeners();
}
}
}

View File

@@ -0,0 +1,15 @@
import 'package:flutter/material.dart';
class MihMineSweeper extends StatefulWidget {
const MihMineSweeper({super.key});
@override
State<MihMineSweeper> createState() => _MihMineSweeperState();
}
class _MihMineSweeperState extends State<MihMineSweeper> {
@override
Widget build(BuildContext context) {
return const Placeholder();
}
}

View File

@@ -3,10 +3,10 @@ import 'package:flutter_speed_dial/flutter_speed_dial.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/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.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_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_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';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart';
@@ -22,6 +22,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.da
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';
import 'package:barcode_widget/barcode_widget.dart'; import 'package:barcode_widget/barcode_widget.dart';
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 {
@@ -149,6 +150,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
.updateLoyaltyCardAPICall( .updateLoyaltyCardAPICall(
widget.signedInUser, widget.signedInUser,
widget.cardList[index].idloyalty_cards, widget.cardList[index].idloyalty_cards,
widget.cardList[index].shop_name,
widget.cardList[index].favourite, widget.cardList[index].favourite,
widget.cardList[index].priority_index, widget.cardList[index].priority_index,
_nicknameController.text, _nicknameController.text,
@@ -158,13 +160,28 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
if (statusCode == 200) { if (statusCode == 200) {
context.pop(); context.pop();
context.pop(); context.pop();
context.goNamed( // context
"mzansiWallet", // .read<MzansiWalletProvider>()
extra: WalletArguments( // .editLoyaltyCard(
widget.signedInUser, // updatedCard: MIHLoyaltyCard(
0, // idloyalty_cards:
), // widget.cardList[index].idloyalty_cards,
); // app_id: widget.signedInUser.app_id,
// shop_name: widget.cardList[index].shop_name,
// card_number: _cardNumberController.text,
// favourite: widget.cardList[index].favourite,
// priority_index:
// widget.cardList[index].priority_index,
// nickname: _nicknameController.text,
// ),
// );
// context.goNamed(
// "mzansiWallet",
// extra: WalletArguments(
// widget.signedInUser,
// 0,
// ),
// );
} else { } else {
internetConnectionPopUp(); internetConnectionPopUp();
} }
@@ -212,9 +229,6 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
context, context,
); );
if (statusCode == 200) { if (statusCode == 200) {
setState(() {
widget.cardList.removeAt(index);
});
context.pop(); context.pop();
context.pop(); context.pop();
} else { } else {
@@ -260,6 +274,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
await MIHMzansiWalletApis.updateLoyaltyCardAPICall( await MIHMzansiWalletApis.updateLoyaltyCardAPICall(
widget.signedInUser, widget.signedInUser,
widget.cardList[index].idloyalty_cards, widget.cardList[index].idloyalty_cards,
widget.cardList[index].shop_name,
"Yes", "Yes",
_noFavourites, _noFavourites,
widget.cardList[index].nickname, widget.cardList[index].nickname,
@@ -269,13 +284,9 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
if (statusCode == 200) { if (statusCode == 200) {
context.pop(); context.pop();
context.pop(); context.pop();
context.goNamed( await MIHMzansiWalletApis.getFavouriteLoyaltyCards(
"mzansiWallet", widget.signedInUser.app_id, context);
extra: WalletArguments( context.read<MzansiWalletProvider>().setToolIndex(1);
widget.signedInUser,
1,
),
);
} else { } else {
internetConnectionPopUp(); internetConnectionPopUp();
} }
@@ -345,6 +356,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
await MIHMzansiWalletApis.updateLoyaltyCardAPICall( await MIHMzansiWalletApis.updateLoyaltyCardAPICall(
widget.signedInUser, widget.signedInUser,
widget.cardList[index].idloyalty_cards, widget.cardList[index].idloyalty_cards,
widget.cardList[index].shop_name,
"", "",
0, 0,
widget.cardList[index].nickname, widget.cardList[index].nickname,
@@ -354,13 +366,9 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
if (statusCode == 200) { if (statusCode == 200) {
context.pop(); context.pop();
context.pop(); context.pop();
context.goNamed( await MIHMzansiWalletApis.getFavouriteLoyaltyCards(
"mzansiWallet", widget.signedInUser.app_id, context);
extra: WalletArguments( context.read<MzansiWalletProvider>().setToolIndex(0);
widget.signedInUser,
0,
),
);
} else { } else {
internetConnectionPopUp(); internetConnectionPopUp();
} }

View File

@@ -1,12 +1,9 @@
// ignore_for_file: must_be_immutable
import 'package:flutter/material.dart'; 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/app_user.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/loyalty_card.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';
@@ -22,12 +19,10 @@ import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'
class MihAddCardWindow extends StatefulWidget { class MihAddCardWindow extends StatefulWidget {
final AppUser signedInUser; final AppUser signedInUser;
Future<List<MIHLoyaltyCard>> cardList;
MihAddCardWindow({ const MihAddCardWindow({
super.key, super.key,
required this.signedInUser, required this.signedInUser,
required this.cardList,
}); });
@override @override
@@ -133,8 +128,6 @@ class _MihAddCardWindowState extends State<MihAddCardWindow> {
} }
} }
// ... rest of your existing methods
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final double width = MediaQuery.sizeOf(context).width; final double width = MediaQuery.sizeOf(context).width;
@@ -320,11 +313,6 @@ class _MihAddCardWindowState extends State<MihAddCardWindow> {
context, context,
); );
if (statusCode == 201) { if (statusCode == 201) {
setState(() {
widget.cardList =
MIHMzansiWalletApis.getLoyaltyCards(
widget.signedInUser.app_id);
});
context.pop(); context.pop();
KenLogger.error("Card Added Successfully"); KenLogger.error("Card Added Successfully");
successPopUp( successPopUp(

View File

@@ -3,17 +3,19 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
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_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_providers/mzansi_wallet_provider.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';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tools/mih_cards.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tools/mih_cards.dart';
import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart';
import 'package:provider/provider.dart';
class MihWallet extends StatefulWidget { class MihWallet extends StatefulWidget {
final WalletArguments arguments; final WalletArguments arguments;
// final AppUser signedInUser;
const MihWallet({ const MihWallet({
super.key, super.key,
required this.arguments, required this.arguments,
// required this.signedInUser,
}); });
@override @override
@@ -21,13 +23,34 @@ class MihWallet extends StatefulWidget {
} }
class _MihWalletState extends State<MihWallet> { class _MihWalletState extends State<MihWallet> {
late int _selcetedIndex; bool isLoading = true;
void setPackageIndex() {
if (widget.arguments.index >= 0 && widget.arguments.index <= 3) {
context.read<MzansiWalletProvider>().setToolIndex(widget.arguments.index);
}
}
Future<void> setLoyaltyCards() async {
await MIHMzansiWalletApis.getLoyaltyCards(
widget.arguments.signedInUser.app_id, context);
}
Future<void> setFavouritesCards() async {
await MIHMzansiWalletApis.getFavouriteLoyaltyCards(
widget.arguments.signedInUser.app_id, context);
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
setState(() { WidgetsBinding.instance.addPostFrameCallback((_) async {
_selcetedIndex = widget.arguments.index; setPackageIndex();
await setLoyaltyCards();
await setFavouritesCards();
setState(() {
isLoading = false;
});
}); });
} }
@@ -38,12 +61,13 @@ class _MihWalletState extends State<MihWallet> {
appTools: getTools(), appTools: getTools(),
appBody: getToolBody(), appBody: getToolBody(),
appToolTitles: getToolTitle(), appToolTitles: getToolTitle(),
selectedbodyIndex: _selcetedIndex, selectedbodyIndex: context.watch<MzansiWalletProvider>().toolIndex,
onIndexChange: (newValue) { onIndexChange: (newIndex) {
setState(() { context.read<MzansiWalletProvider>().setToolIndex(newIndex);
_selcetedIndex = newValue; // setState(() {
}); // _selcetedIndex = newValue;
print("Index: $_selcetedIndex"); // });
// print("Index: $_selcetedIndex");
}, },
); );
} }
@@ -65,19 +89,15 @@ class _MihWalletState extends State<MihWallet> {
MihPackageTools getTools() { MihPackageTools getTools() {
Map<Widget, void Function()?> temp = {}; Map<Widget, void Function()?> temp = {};
temp[const Icon(Icons.card_membership)] = () { temp[const Icon(Icons.card_membership)] = () {
setState(() { context.read<MzansiWalletProvider>().setToolIndex(0);
_selcetedIndex = 0;
});
}; };
temp[const Icon(Icons.favorite)] = () { temp[const Icon(Icons.favorite)] = () {
setState(() { context.read<MzansiWalletProvider>().setToolIndex(1);
_selcetedIndex = 1;
});
}; };
return MihPackageTools( return MihPackageTools(
tools: temp, tools: temp,
selcetedIndex: _selcetedIndex, selcetedIndex: context.watch<MzansiWalletProvider>().toolIndex,
); );
} }
@@ -90,6 +110,13 @@ class _MihWalletState extends State<MihWallet> {
signedInUser: widget.arguments.signedInUser, signedInUser: widget.arguments.signedInUser,
), ),
]; ];
if (isLoading) {
return [
const Center(
child: Mihloadingcircle(),
)
];
}
return toolBodies; return toolBodies;
} }

View File

@@ -1,12 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.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_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.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';
class MihCardFavourites extends StatefulWidget { class MihCardFavourites extends StatefulWidget {
final AppUser signedInUser; final AppUser signedInUser;
@@ -24,13 +24,17 @@ class _MihCardFavouritesState extends State<MihCardFavourites> {
late MihBannerAd _bannerAd; late MihBannerAd _bannerAd;
List<MIHLoyaltyCard> listOfCards = []; List<MIHLoyaltyCard> listOfCards = [];
void getFavouriteLoyaltyCards(BuildContext context) async {
setState(() {
listOfCards = context.read<MzansiWalletProvider>().favouriteCards;
});
}
@override @override
void initState() { void initState() {
super.initState();
_bannerAd = MihBannerAd(); _bannerAd = MihBannerAd();
cardList = MIHMzansiWalletApis.getFavouriteLoyaltyCards( getFavouriteLoyaltyCards(context);
widget.signedInUser.app_id, super.initState();
);
} }
@override @override
@@ -47,69 +51,23 @@ class _MihCardFavouritesState extends State<MihCardFavourites> {
MihSingleChildScroll( MihSingleChildScroll(
child: Column( child: Column(
children: [ children: [
FutureBuilder( BuildLoyaltyCardList(
future: cardList, cardList: listOfCards,
builder: (context, snapshot) { signedInUser: widget.signedInUser,
if (snapshot.connectionState == ConnectionState.waiting) { navIndex: 0,
return const Center( bannerAd: _bannerAd,
child: Mihloadingcircle(), favouritesMode: true,
); searchText: TextEditingController(),
} else if (snapshot.connectionState == ConnectionState.done && onCardViewClose: () {
snapshot.hasData) { setState(() {
listOfCards = snapshot.data!; _bannerAd = MihBannerAd();
// searchShop(); });
return BuildLoyaltyCardList( Navigator.pop(context);
cardList: listOfCards,
signedInUser: widget.signedInUser,
navIndex: 0,
bannerAd: _bannerAd,
favouritesMode: true,
searchText: TextEditingController(),
onCardViewClose: () {
setState(() {
_bannerAd = MihBannerAd();
});
Navigator.pop(context);
},
);
} else {
return const Center(
child: Text("Error Loading Loyalty Cards"),
);
}
}, },
), ),
], ],
), ),
), ),
// Positioned(
// right: 0,
// bottom: 0,
// child: MihFloatingMenu(
// animatedIcon: AnimatedIcons.menu_close,
// children: [
// SpeedDialChild(
// child: Icon(
// Icons.add,
// color:
// MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
// ),
// label: "Add Loyalty Card",
// labelBackgroundColor:
// MihColors.getGreenColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
// labelStyle: TextStyle(
// color:
// MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
// fontWeight: FontWeight.bold,
// ),
// backgroundColor:
// MihColors.getGreenColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
// onTap: () {
// // addCardWindow(context);
// },
// )
// ]),
// )
], ],
); );
} }

View File

@@ -3,21 +3,21 @@ 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_banner_ad.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.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_package_alert.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_packages/mzansi_wallet/components/mih_add_card_window.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_add_card_window.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.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_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_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_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_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.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';
import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:provider/provider.dart';
class MihCards extends StatefulWidget { class MihCards extends StatefulWidget {
final AppUser signedInUser; final AppUser signedInUser;
@@ -33,7 +33,6 @@ class MihCards extends StatefulWidget {
class _MihCardsState extends State<MihCards> { class _MihCardsState extends State<MihCards> {
final TextEditingController cardSearchController = TextEditingController(); final TextEditingController cardSearchController = TextEditingController();
final FocusNode searchFocusNode = FocusNode(); final FocusNode searchFocusNode = FocusNode();
late Future<List<MIHLoyaltyCard>> cardList;
MihBannerAd _bannerAd = MihBannerAd(); MihBannerAd _bannerAd = MihBannerAd();
List<MIHLoyaltyCard> listOfCards = []; List<MIHLoyaltyCard> listOfCards = [];
final ValueNotifier<List<MIHLoyaltyCard>> searchShopName = ValueNotifier([]); final ValueNotifier<List<MIHLoyaltyCard>> searchShopName = ValueNotifier([]);
@@ -132,7 +131,6 @@ class _MihCardsState extends State<MihCards> {
barrierDismissible: false, barrierDismissible: false,
builder: (context) => MihAddCardWindow( builder: (context) => MihAddCardWindow(
signedInUser: widget.signedInUser, signedInUser: widget.signedInUser,
cardList: cardList,
), ),
); );
} }
@@ -146,9 +144,16 @@ class _MihCardsState extends State<MihCards> {
super.dispose(); super.dispose();
} }
void getLoyaltyCards(BuildContext context) async {
setState(() {
listOfCards = context.read<MzansiWalletProvider>().loyaltyCards;
});
searchShop();
}
@override @override
void initState() { void initState() {
cardList = MIHMzansiWalletApis.getLoyaltyCards(widget.signedInUser.app_id); getLoyaltyCards(context);
cardSearchController.addListener(searchShop); cardSearchController.addListener(searchShop);
super.initState(); super.initState();
} }
@@ -187,23 +192,14 @@ class _MihCardsState extends State<MihCards> {
), ),
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
FutureBuilder( Consumer<MzansiWalletProvider>(
future: cardList, builder: (context, mzansiWalletProvider, child) {
builder: (context, snapshot) { listOfCards = mzansiWalletProvider.loyaltyCards;
if (snapshot.connectionState == ConnectionState.waiting) { return ValueListenableBuilder<List<MIHLoyaltyCard>>(
return const Center(
child: Mihloadingcircle(),
);
} else if (snapshot.connectionState == ConnectionState.done &&
snapshot.hasData) {
listOfCards = snapshot.data!;
searchShop();
return ValueListenableBuilder(
valueListenable: searchShopName, valueListenable: searchShopName,
builder: (BuildContext context, builder: (context, filteredCards, child) {
List<MIHLoyaltyCard> value, Widget? child) {
return BuildLoyaltyCardList( return BuildLoyaltyCardList(
cardList: value, cardList: filteredCards, //listOfCards,
signedInUser: widget.signedInUser, signedInUser: widget.signedInUser,
navIndex: 0, navIndex: 0,
bannerAd: _bannerAd, bannerAd: _bannerAd,
@@ -216,13 +212,7 @@ class _MihCardsState extends State<MihCards> {
// Navigator.pop(context); // Navigator.pop(context);
}, },
); );
}, });
);
} else {
return const Center(
child: Text("Error Loading Loyalty Cards"),
);
}
}, },
), ),
], ],

View File

@@ -5,6 +5,8 @@ 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_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:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart';
import 'package:provider/provider.dart';
import 'package:supertokens_flutter/http.dart' as http; import 'package:supertokens_flutter/http.dart' as http;
import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; import '../mih_components/mih_pop_up_messages/mih_error_message.dart';
@@ -14,45 +16,39 @@ import '../mih_config/mih_env.dart';
class MIHMzansiWalletApis { class MIHMzansiWalletApis {
final baseAPI = AppEnviroment.baseApiUrl; final baseAPI = AppEnviroment.baseApiUrl;
/// This function is used to fetch a list of loyalty cards for a user. static Future<void> getLoyaltyCards(
///
/// Patameters: app_id .
///
/// Returns List<PatientQueue>.
static Future<List<MIHLoyaltyCard>> getLoyaltyCards(
String app_id, String app_id,
BuildContext context,
) async { ) async {
final response = await http.get(Uri.parse( final response = await http.get(Uri.parse(
"${AppEnviroment.baseApiUrl}/mzasni-wallet/loyalty-cards/$app_id")); "${AppEnviroment.baseApiUrl}/mzasni-wallet/loyalty-cards/$app_id"));
if (response.statusCode == 200) { if (response.statusCode == 200) {
Iterable l = jsonDecode(response.body); Iterable l = jsonDecode(response.body);
List<MIHLoyaltyCard> patientQueue = List<MIHLoyaltyCard>.from( List<MIHLoyaltyCard> myCards = List<MIHLoyaltyCard>.from(
l.map((model) => MIHLoyaltyCard.fromJson(model))); l.map((model) => MIHLoyaltyCard.fromJson(model)));
return patientQueue; context.read<MzansiWalletProvider>().setLoyaltyCards(cards: myCards);
// return myCards;
} else { } else {
throw Exception('failed to fatch loyalty cards'); throw Exception('failed to fatch loyalty cards');
} }
} }
/// This function is used to fetch a list of loyalty cards for a user. static Future<void> getFavouriteLoyaltyCards(
///
/// Patameters: app_id .
///
/// Returns List<PatientQueue>.
static Future<List<MIHLoyaltyCard>> getFavouriteLoyaltyCards(
String app_id, String app_id,
BuildContext context,
) async { ) async {
//print("Patien manager page: $endpoint"); //print("Patien manager page: $endpoint");
final response = await http.get(Uri.parse( final response = await http.get(Uri.parse(
"${AppEnviroment.baseApiUrl}/mzasni-wallet/loyalty-cards/favourites/$app_id")); "${AppEnviroment.baseApiUrl}/mzasni-wallet/loyalty-cards/favourites/$app_id"));
if (response.statusCode == 200) { if (response.statusCode == 200) {
Iterable l = jsonDecode(response.body); Iterable l = jsonDecode(response.body);
List<MIHLoyaltyCard> patientQueue = List<MIHLoyaltyCard>.from( List<MIHLoyaltyCard> myCards = List<MIHLoyaltyCard>.from(
l.map((model) => MIHLoyaltyCard.fromJson(model))); l.map((model) => MIHLoyaltyCard.fromJson(model)));
return patientQueue; context.read<MzansiWalletProvider>().setFavouriteCards(cards: myCards);
} else {
throw Exception('failed to fatch loyalty cards');
} }
// else {
// throw Exception('failed to fatch loyalty cards');
// }
} }
/// This function is used to Delete loyalty card from users mzansi wallet. /// This function is used to Delete loyalty card from users mzansi wallet.
@@ -80,6 +76,11 @@ class MIHMzansiWalletApis {
//print("Here4"); //print("Here4");
//print(response.statusCode); //print(response.statusCode);
context.pop(); context.pop();
if (response.statusCode == 200) {
context
.read<MzansiWalletProvider>()
.deleteLoyaltyCard(cardId: idloyalty_cards);
}
return response.statusCode; return response.statusCode;
// if (response.statusCode == 200) { // if (response.statusCode == 200) {
// Navigator.of(context).pop(); // Navigator.of(context).pop();
@@ -165,6 +166,7 @@ class MIHMzansiWalletApis {
static Future<int> updateLoyaltyCardAPICall( static Future<int> updateLoyaltyCardAPICall(
AppUser signedInUser, AppUser signedInUser,
int idloyalty_cards, int idloyalty_cards,
String shopName,
String favourite, String favourite,
int priority_index, int priority_index,
String nickname, String nickname,
@@ -187,6 +189,19 @@ class MIHMzansiWalletApis {
}), }),
); );
context.pop(); context.pop();
if (response.statusCode == 200) {
context.read<MzansiWalletProvider>().editLoyaltyCard(
updatedCard: MIHLoyaltyCard(
idloyalty_cards: idloyalty_cards,
app_id: signedInUser.app_id,
shop_name: shopName,
card_number: card_number,
favourite: favourite,
priority_index: priority_index,
nickname: nickname,
),
);
}
return response.statusCode; return response.statusCode;
} }