From 14be040264b7439814af830fcd9ac6948ba688de Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 12:01:07 +0200 Subject: [PATCH] add edit card window and edit card menu option --- .../builder/build_loyalty_card_list.dart | 165 ++++++++++++++---- 1 file changed, 130 insertions(+), 35 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index fbe54d98..284e9223 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -2,10 +2,14 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_apis/mih_mzansi_wallet_apis.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_number_input.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_text_input.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_alert.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.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_error_message.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_card_display.dart'; @@ -31,8 +35,104 @@ class BuildLoyaltyCardList extends StatefulWidget { } class _BuildLoyaltyCardListState extends State { + final TextEditingController _nicknameController = TextEditingController(); + final TextEditingController _cardNumberController = TextEditingController(); late int _noFavourites; + void openscanner() async { + Navigator.of(context).pushNamed( + '/scanner', + arguments: _cardNumberController, + ); + } + + void editCardWindow(BuildContext ctxt, int index) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) => MIHWindow( + fullscreen: false, + windowTitle: "Edit Loyalty Card", + windowTools: const [ + SizedBox(width: 35), + ], + onWindowTapClose: () { + _cardNumberController.clear(); + _nicknameController.clear(); + Navigator.pop(context); + }, + windowBody: [ + MIHTextField( + controller: _nicknameController, + hintText: "Card Nickname", + editable: true, + required: false, + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + child: MIHNumberField( + controller: _cardNumberController, + hintText: "Card Number", + editable: true, + required: true, + enableDecimal: false, + ), + ), + const SizedBox(width: 10), + MIHButton( + onTap: () async { + openscanner(); + }, + buttonText: "Scan", + buttonColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + textColor: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ], + ), + const SizedBox(height: 15), + SizedBox( + width: 300, + height: 50, + child: MIHButton( + onTap: () { + if (_cardNumberController.text == "") { + showDialog( + context: context, + builder: (context) { + return const MIHErrorMessage(errorType: "Input Error"); + }, + ); + } else { + MIHMzansiWalletApis.updateLoyaltyCardAPICall( + widget.signedInUser, + widget.cardList[index].idloyalty_cards, + widget.cardList[index].favourite, + widget.cardList[index].priority_index, + _nicknameController.text, + _cardNumberController.text, + 0, + ctxt, + ); + } + }, + buttonText: "Update", + buttonColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + textColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ), + ], + ), + ); + } + void deleteCardWindow(BuildContext ctxt, int index) { showDialog( context: context, @@ -87,6 +187,8 @@ class _BuildLoyaltyCardListState extends State { widget.cardList[index].idloyalty_cards, "Yes", _noFavourites, + widget.cardList[index].nickname, + widget.cardList[index].card_number, 0, ctxt, ); @@ -141,6 +243,8 @@ class _BuildLoyaltyCardListState extends State { widget.cardList[index].idloyalty_cards, "", 0, + widget.cardList[index].nickname, + widget.cardList[index].card_number, 0, ctxt, ); @@ -177,41 +281,6 @@ class _BuildLoyaltyCardListState extends State { windowTitle: widget.cardList[index].shop_name.toUpperCase(), windowTools: Row( children: [ - // IconButton( - // onPressed: () { - // deleteCardWindow(context, index); - // }, - // icon: Icon( - // Icons.delete, - // color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), - // ), - // ), - // Visibility( - // visible: widget.cardList[index].favourite == "", - // child: IconButton( - // onPressed: () { - // addToFavCardWindow(context, index); - // }, - // icon: Icon( - // Icons.favorite, - // color: - // MzanziInnovationHub.of(context)!.theme.secondaryColor(), - // ), - // ), - // ), - // Visibility( - // visible: widget.cardList[index].favourite != "", - // child: IconButton( - // onPressed: () { - // removeFromFavCardWindow(context, index); - // }, - // icon: Icon( - // Icons.favorite_border, - // color: - // MzanziInnovationHub.of(context)!.theme.secondaryColor(), - // ), - // ), - // ), Padding( padding: const EdgeInsets.only(top: 5.0), child: MihFloatingMenu( @@ -252,6 +321,32 @@ class _BuildLoyaltyCardListState extends State { } }, ), + SpeedDialChild( + child: Icon( + Icons.edit, + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + label: "Edit Card Details", + labelBackgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + labelStyle: TextStyle( + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + fontWeight: FontWeight.bold, + ), + backgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + onTap: () { + setState(() { + _cardNumberController.text = + widget.cardList[index].card_number; + _nicknameController.text = + widget.cardList[index].nickname; + }); + editCardWindow(context, index); + }, + ), SpeedDialChild( child: Icon( Icons.delete,