Estou chamando uma API quando um item é adicionado ao carrinho e, se for bem-sucedido, a barra de lanches mostrará o sucesso, mas e se o usuário adicionar um após muitos produtos, todas as barras de lanches serão mostradas uma por uma por um por um longo tempo, então eu quero que quando o usuário parar, a barra de lanches mostre apenas uma vez, a última, a mais recente com a mensagem MyCart Api
Timer? debounceSnackBarTimer;
Future<void> addToCart(Package package) async {
final prefs = await SharedPreferences.getInstance();
final accessToken = prefs.getString('accessToken');
final String apiUrl = await AppNetworkingUrls.addtoCart;
if (accessToken == null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Please log in to add items to the cart',
style: GoogleFonts.poppins(),
),
),
);
return;
}
final url = Uri.parse(apiUrl);
final headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer $accessToken',
};
final body = jsonEncode({
'quantity': 1,
'productId': product.id,
'packageId': package.id,
});
debounceSnackBarTimer?.cancel();
debounceSnackBarTimer = Timer(Duration(milliseconds: 800), () async {
try {
final response = await http.post(
url,
headers: headers,
body: body,
);
if (response.statusCode == 200) {
final responseData = jsonDecode(response.body);
print(response.body);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: AppColors.buttonColor,
duration: Duration(seconds: 2),
content: Text(
responseData['message'] ?? 'Item added to cart',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
final cartProvider = Provider.of<Cart>(context, listen: false);
await cartProvider.fetchCartItems();
} else {
final responseData = jsonDecode(response.body);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: Colors.red,
duration: Duration(seconds: 2),
content: Text(
responseData['message'] ?? 'Failed to add item',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
}
} catch (error) {
print('Error adding to cart: $error');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: Colors.red,
duration: Duration(seconds: 2),
content: Text(
'Something went wrong. Please try again.',
style: GoogleFonts.poppins(fontWeight: FontWeight.w500),
),
),
);
}
});
}
há produtos Diff e cada produto tem pacotes diff, o usuário adicionará vários produtos também, mas eu quero mostrar o mais recente apenas uma vez
Eu também tentei o Debounce, mas não está funcionando como eu queria. Por favor, se alguém puder me ajudar, o Debounce só funciona se o usuário adicionar os mesmos produtos, o mesmo pacote repetidamente. Então isso funciona, mas eu quero que funcione em todos os produtos e pacotes.