BUG: Add card refresh list

This commit is contained in:
2025-11-03 10:18:29 +02:00
parent bcff545dd7
commit 52f9eb7ba6
7 changed files with 166 additions and 131 deletions

View File

@@ -29,19 +29,18 @@ class MihCards extends StatefulWidget {
class _MihCardsState extends State<MihCards> {
final TextEditingController cardSearchController = TextEditingController();
final FocusNode searchFocusNode = FocusNode();
List<MIHLoyaltyCard> listOfCards = [];
final ValueNotifier<List<MIHLoyaltyCard>> searchShopName = ValueNotifier([]);
final MobileScannerController scannerController = MobileScannerController(
detectionSpeed: DetectionSpeed.unrestricted,
);
final boxFit = BoxFit.contain;
void searchShop() {
void searchShop(List<MIHLoyaltyCard> allCards) {
if (cardSearchController.text.isEmpty) {
searchShopName.value = listOfCards;
searchShopName.value = allCards;
} else {
List<MIHLoyaltyCard> temp = [];
for (var item in listOfCards) {
for (var item in allCards) {
if (item.shop_name
.toLowerCase()
.contains(cardSearchController.text.toLowerCase()) ||
@@ -130,24 +129,23 @@ class _MihCardsState extends State<MihCards> {
@override
void dispose() {
cardSearchController.removeListener(searchShop);
final walletProvider = context.read<MzansiWalletProvider>();
cardSearchController.removeListener(() {
searchShop(walletProvider.loyaltyCards);
});
cardSearchController.dispose();
searchShopName.dispose();
searchFocusNode.dispose();
super.dispose();
}
void getLoyaltyCards(BuildContext context) async {
setState(() {
listOfCards = context.read<MzansiWalletProvider>().loyaltyCards;
});
searchShop();
}
@override
void initState() {
getLoyaltyCards(context);
cardSearchController.addListener(searchShop);
final walletProvider = context.read<MzansiWalletProvider>();
searchShopName.value = walletProvider.loyaltyCards;
cardSearchController.addListener(() {
searchShop(walletProvider.loyaltyCards);
});
super.initState();
}
@@ -162,76 +160,89 @@ class _MihCardsState extends State<MihCards> {
}
Widget getBody(double width) {
return Stack(
children: [
MihSingleChildScroll(
child: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: width / 20),
child: MihSearchBar(
controller: cardSearchController,
hintText: "Search Cards",
// prefixIcon: Icons.search,
prefixIcon: Icons.search,
fillColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
hintColor: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
onPrefixIconTap: () {
// print("Search Icon Pressed: ${cardSearchController.text}");
},
searchFocusNode: searchFocusNode,
),
),
const SizedBox(height: 10),
Consumer<MzansiWalletProvider>(
builder: (context, mzansiWalletProvider, child) {
listOfCards = mzansiWalletProvider.loyaltyCards;
return ValueListenableBuilder<List<MIHLoyaltyCard>>(
valueListenable: searchShopName,
builder: (context, filteredCards, child) {
return BuildLoyaltyCardList(
cardList: filteredCards, //listOfCards,
navIndex: 0,
favouritesMode: false,
searchText: cardSearchController,
);
});
},
),
],
),
),
Positioned(
right: 10,
bottom: 10,
child: MihFloatingMenu(
animatedIcon: AnimatedIcons.menu_close,
children: [
SpeedDialChild(
child: Icon(
Icons.add,
color: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
return Consumer<MzansiWalletProvider>(
builder: (BuildContext context, MzansiWalletProvider walletProvider,
Widget? child) {
if (cardSearchController.text.isEmpty) {
searchShopName.value = walletProvider.loyaltyCards;
} else {
// Re-run search with updated card list
searchShop(walletProvider.loyaltyCards);
}
return Stack(
children: [
MihSingleChildScroll(
child: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: width / 20),
child: MihSearchBar(
controller: cardSearchController,
hintText: "Search Cards",
// prefixIcon: Icons.search,
prefixIcon: Icons.search,
fillColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
hintColor: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
onPrefixIconTap: () {
// print("Search Icon Pressed: ${cardSearchController.text}");
},
searchFocusNode: searchFocusNode,
),
),
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,
const SizedBox(height: 10),
ValueListenableBuilder<List<MIHLoyaltyCard>>(
valueListenable: searchShopName,
builder: (context, filteredCards, child) {
return BuildLoyaltyCardList(
cardList: filteredCards, //listOfCards,
navIndex: 0,
favouritesMode: false,
searchText: cardSearchController,
);
},
),
backgroundColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
onTap: () {
addCardWindow(context, width);
},
)
]),
)
],
],
),
),
Positioned(
right: 10,
bottom: 10,
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, width);
},
)
]),
)
],
);
},
);
}
}