Closed Frozen-Burrito closed 2 years ago
Confirmando, el widget CoinDisplay
en sí no es el problema.
El número raro no era un problema, pero al investigar las transacciones de monedas en la app, se descubrió un error en el método giveOrTakeCoins()
. Esta función estaba implementada de la siguiente manera:
void giveOrTakeCoins(int amount) {
int newCoinCount = coins + amount;
if (newCoinCount.abs() > maxCoins) {
throw RangeError.range(newCoinCount, 0, maxCoins, 'amount');
}
_coins = amount;
}
Tenía dos problemas principales, que fueron solucionados:
_coins
era asignada el valor de amount
directamente, ignorando por completo el valor de newCoinCount
.newCoinCount
fuera menor o igual a maxCoins
lanzaba un error de rango. Esto es poco apropiado para el caso de esta app. Un comportamiento más simple, como asignar maxCoins
si el incremento es mayor al límite, es mejor.Además, se usaba el getter coins
, en vez de usar el valor directo de _coins
.
Esto se arregló dividiendo la función en 2:
void addCoins(int amount) {
_coins = min(maxCoins, _coins + amount.abs());
}
bool spendCoins(int amount) {
final hasEnoughCoins = _coins >= amount;
if (hasEnoughCoins) _coins -= amount.abs();
return hasEnoughCoins;
}
Descripción del Error Durante pruebas de la app, he notado que el número de monedas mostrado por
CoinDisplay
no es correcto; la mayoría de las veces es "3", un número poco común para haber sido obtenido como recompensa por hidratación o actividad.Cómo Reproducir Pasos para reproducir el error:
CoinDisplay
en su appbar superior, como las pestañas de inicio o perfil.Comportamiento Esperado El widget debería mostrar una cantidad de monedas más normal, como 0, 50 o lo que haya conseguido el usuario por recompensas.
Entorno
v1.0.0-beta+1
Contexto Adicional El widget
CoinDisplay
obtiene el número de monedas del usuario al consumir el estado deProfileProvider
. En el widget en sí no parece que haya problemas, entonces es probable que el problema sea 1 de 2 posibilidades:ProfileProvider
o el modeloUserProfile
alteran el valor deprofile.coins
.