Mzansi Wallet 2.0 update

This commit is contained in:
2026-04-15 12:39:48 +02:00
parent 379633d7f5
commit c0077e532c
49 changed files with 207 additions and 80 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@@ -343,6 +343,105 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
); );
} }
Color getCardColor(String shopName) {
switch (shopName.toLowerCase()) {
case "apple tree":
return const Color(0xFFffffff);
case "best before":
return const Color(0xFF000000);
case "checkers":
return const Color(0xFF00a6a3);
case "clicks":
return const Color(0xFF005caf);
case "cotton:on":
return const Color(0xFFffffff);
case "dis-chem":
return const Color(0xFF00a950);
case "pick n pay":
return const Color(0xFFffffff);
case "shoprite":
return const Color(0xFFc12514);
case "spar":
return const Color(0xFFffffff);
case "woolworths":
return const Color(0xFF000000);
case "makro":
return const Color(0xFFffffff);
case "fresh stop":
return const Color(0xFF50b849);
case "panarottis":
return const Color(0xFF3c3c3b);
case "shell":
return const Color(0xFF1d232a);
case "edgars":
return const Color(0xFFffffff);
case "jet":
return const Color(0xFFffffff);
case "spur":
return const Color(0xFF0a0157);
case "infinity":
return const Color(0xFFffffff);
case "eskom":
return const Color(0xFF003897);
case "+more":
return const Color(0xFFffffff);
case "bp":
return const Color(0xFF9dc600);
case "builders warehouse":
return const Color(0xFFffcb26);
case "exclusive books":
return const Color(0xFF2abdc5);
case "pna":
return const Color(0xFFcf3339);
case "pq clothing":
return const Color(0xFFed2223);
case "rage":
return const Color(0xFFffffff);
case "sasol":
return const Color(0xFFffffff);
case "tfg group":
return const Color(0xFF622775);
case "toys r us":
return const Color(0xFF0962ad);
case "leroy merlin":
return const Color(0xFFffffff);
case "signature cosmetics & fragrances":
return const Color(0xFFec028b);
case "ok foods":
return const Color(0xFFffffff);
case "choppies":
return const Color(0xFFffffff);
case "boxer":
return const Color(0xFFffffff);
case "carrefour":
return const Color(0xFFffffff);
case "sefalana":
return const Color(0xFFffffff);
case "big save":
return const Color(0xFF333333);
case "justrite":
return const Color(0xFF50b849);
case "naivas":
return const Color(0xFFf26535);
case "kero":
return const Color(0xFF004986);
case "auchan":
return const Color(0xFFffffff);
case "woermann brock":
return const Color(0xFFe31e2d);
case "continente":
return const Color(0xFFffffff);
case "fresmart":
return const Color(0xFF72ba2e);
case "total energies":
return const Color(0xFFffffff);
case "engen":
return const Color(0xFF002b8f);
default:
return const Color(0xFFffffff);
}
}
void viewCardWindow(MzansiProfileProvider mzansiProfileProvider, void viewCardWindow(MzansiProfileProvider mzansiProfileProvider,
MzansiWalletProvider walletProvider, int index, double width) { MzansiWalletProvider walletProvider, int index, double width) {
//print(widget.cardList[index].card_number); //print(widget.cardList[index].card_number);
@@ -357,8 +456,9 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
builder: (context) => MihPackageWindow( builder: (context) => MihPackageWindow(
backgroundColor: getCardColor(widget.cardList[index].shop_name),
fullscreen: false, fullscreen: false,
windowTitle: widget.cardList[index].shop_name.toUpperCase(), windowTitle: null,
menuOptions: [ menuOptions: [
SpeedDialChild( SpeedDialChild(
child: widget.cardList[index].favourite == "" child: widget.cardList[index].favourite == ""
@@ -452,12 +552,14 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
windowBody: Column( windowBody: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: [ children: [
Container( SizedBox(
height: 15,
),
SizedBox(
width: 500, width: 500,
child: MihCardDisplay( child: MihCardDisplay(
shopName: widget.cardList[index].shop_name, shopName: widget.cardList[index].shop_name,
nickname: widget.cardList[index].nickname, nickname: widget.cardList[index].nickname,
height: 250,
), ),
), ),
const SizedBox(height: 20), const SizedBox(height: 20),
@@ -474,7 +576,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
Padding( Padding(
padding: const EdgeInsets.all(10.0), padding: const EdgeInsets.all(10.0),
child: SizedBox( child: SizedBox(
height: 75, height: 150,
// width: 300, // width: 300,
child: BarcodeWidget( child: BarcodeWidget(
//color: MihColors.secondary(), //color: MihColors.secondary(),
@@ -625,16 +727,16 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
), ),
itemCount: widget.cardList.length, itemCount: widget.cardList.length,
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
mainAxisSpacing: 0, mainAxisSpacing: 5,
crossAxisSpacing: 5, crossAxisSpacing: 5,
maxCrossAxisExtent: 200, maxCrossAxisExtent: 200,
// childAspectRatio: 0.80,
), ),
itemBuilder: (context, index) { itemBuilder: (context, index) {
return GestureDetector( return GestureDetector(
child: MihCardDisplay( child: MihCardDisplay(
shopName: widget.cardList[index].shop_name, shopName: widget.cardList[index].shop_name,
nickname: widget.cardList[index].nickname, nickname: widget.cardList[index].nickname,
height: 100,
), ),
onTap: () { onTap: () {
setScreenBrightness(1.0); setScreenBrightness(1.0);

View File

@@ -143,23 +143,31 @@ class _MihAddCardWindowState extends State<MihAddCardWindow> {
"Woolworths", "Woolworths",
], ],
), ),
ValueListenableBuilder( Row(
valueListenable: _shopName, mainAxisAlignment: MainAxisAlignment.center,
builder: children: [
(BuildContext context, String value, Widget? child) { ValueListenableBuilder(
return Visibility( valueListenable: _shopName,
visible: value != "", builder: (BuildContext context, String value,
child: Column( Widget? child) {
children: [ return Visibility(
const SizedBox(height: 10), visible: value != "",
MihCardDisplay( child: Column(
shopName: _shopName.value, children: [
nickname: "", const SizedBox(height: 10),
height: 200), SizedBox(
], height: 250,
), child: MihCardDisplay(
); shopName: _shopName.value,
}, nickname: "",
),
),
],
),
);
},
),
],
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
MihTextFormField( MihTextFormField(

View File

@@ -1,13 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mih_package_toolkit/mih_package_toolkit.dart';
class MihCardDisplay extends StatefulWidget { class MihCardDisplay extends StatefulWidget {
final String shopName; final String shopName;
final String nickname; final String nickname;
final double height;
const MihCardDisplay({ const MihCardDisplay({
super.key, super.key,
required this.shopName, required this.shopName,
required this.height,
required this.nickname, required this.nickname,
}); });
@@ -20,142 +19,142 @@ class _MihCardDisplayState extends State<MihCardDisplay> {
switch (widget.shopName.toLowerCase()) { switch (widget.shopName.toLowerCase()) {
case "apple tree": case "apple tree":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/apple_tree-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/apple_tree.png');
case "best before": case "best before":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/best_before-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/best_before.png');
case "checkers": case "checkers":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/checkers-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/checkers.png');
case "clicks": case "clicks":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/clicks-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/clicks.png');
case "cotton:on": case "cotton:on":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/cotton_on-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/cotton_on.png');
case "dis-chem": case "dis-chem":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/dischem-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/dischem.png');
case "pick n pay": case "pick n pay":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/pick_n_pay-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/pick_n_pay.png');
case "shoprite": case "shoprite":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/shoprite-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/shoprite.png');
case "spar": case "spar":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/spar-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/spar.png');
case "woolworths": case "woolworths":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/woolworths-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/woolworths.png');
case "makro": case "makro":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/makro-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/makro.png');
case "fresh stop": case "fresh stop":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/fresh_stop-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/fresh_stop.png');
case "panarottis": case "panarottis":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/panarottis-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/panarottis.png');
case "shell": case "shell":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/shell-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/shell.png');
case "edgars": case "edgars":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/edgars-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/edgars.png');
case "jet": case "jet":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/jet-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/jet.png');
case "spur": case "spur":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/spur-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/spur.png');
case "infinity": case "infinity":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/infinity-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/infinity.png');
case "eskom": case "eskom":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/eskom-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/eskom.png');
case "+more": case "+more":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/plus_more-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/plus_more.png');
case "bp": case "bp":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/bp-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/bp.png');
case "builders warehouse": case "builders warehouse":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/builders-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/builders.png');
case "exclusive books": case "exclusive books":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/exclusive_books-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/exclusive_books.png');
case "pna": case "pna":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/pna-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/pna.png');
case "pq clothing": case "pq clothing":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/pq-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/pq.png');
case "rage": case "rage":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/rage-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/rage.png');
case "sasol": case "sasol":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/sasol-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/sasol.png');
case "tfg group": case "tfg group":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/tfg-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/tfg.png');
case "toys r us": case "toys r us":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/toysrus-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/toys_r_us.png');
case "leroy merlin": case "leroy merlin":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/leroy_merlin-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/leroy_merlin.png');
case "signature cosmetics & fragrances": case "signature cosmetics & fragrances":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/signature_cosmetics-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/signature.png');
case "ok foods": case "ok foods":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/ok_food-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/ok_foods.png');
case "choppies": case "choppies":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/choppies-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/choppies.png');
case "boxer": case "boxer":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/boxer-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/boxer.png');
case "carrefour": case "carrefour":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/carrefour-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/carrefour.png');
case "sefalana": case "sefalana":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/sefalana-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/sefalana.png');
case "big save": case "big save":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/big_save-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/big_save.png');
case "justrite": case "justrite":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/justrite-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/justrite.png');
case "naivas": case "naivas":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/naivas-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/naivas.png');
case "kero": case "kero":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/kero-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/kero.png');
case "auchan": case "auchan":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/auchan-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/auchan.png');
case "woermann brock": case "woermann brock":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/woermann_brock-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/woermann_brock.png');
case "continente": case "continente":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/continente-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/continente.png');
case "fresmart": case "fresmart":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/fresmart-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/fresmart.png');
case "total energies": case "total energies":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/total_energies-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/total.png');
case "engen": case "engen":
return Image.asset( return Image.asset(
'lib/mih_package_components/assets/images/loyalty_cards/mini/engen-min.png'); 'lib/mih_package_components/assets/images/loyalty_cards/engen.png');
default: default:
return null; return null;
} }
@@ -165,16 +164,34 @@ class _MihCardDisplayState extends State<MihCardDisplay> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Visibility( return Visibility(
visible: displayLoyaltyCard() != null, visible: displayLoyaltyCard() != null,
child: Column( child: Stack(
children: [ children: [
displayLoyaltyCard() != null ? displayLoyaltyCard()! : SizedBox(), if (displayLoyaltyCard() != null)
FittedBox( ClipRRect(
child: Text( borderRadius: BorderRadius.circular(25),
widget.nickname, child: displayLoyaltyCard()!,
textAlign: TextAlign.center, ),
style: const TextStyle( Container(
fontSize: 25, padding: EdgeInsets.symmetric(vertical: 5.0),
fontWeight: FontWeight.bold, alignment: Alignment.bottomCenter,
child: FittedBox(
child: Container(
padding: EdgeInsets.symmetric(
horizontal: widget.nickname.isNotEmpty ? 8.0 : 0.0),
decoration: BoxDecoration(
color: MihColors.primary(),
borderRadius: BorderRadius.circular(
15,
),
),
child: Text(
widget.nickname,
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
),
),
), ),
), ),
) )