Flutter: Intentando pasar una variable a la siguiente pantalla basándose en la entrada de un DropDownButton
Estoy tratando de reducir el precio de un producto (smartphone) basándome en la selección del usuario en un menú desplegable, y pasar ese precio a la siguiente pantalla. Mi código no tiene errores y funciona perfectamente, pero el problema es que reduce el precio basado únicamente en una instrucción switch (la inicialmente seleccionada globalmente para el valor del menú desplegable) porque el método setState
solo funciona al cambiar el valor del menú desplegable que se muestra en la pantalla, no en la instrucción switch que contiene la función. ¿Alguien puede ayudarme a resolver esto? He intentado muchas cosas, pero nada ha funcionado. A continuación se muestra mi código (es largo, por lo que he omitido las partes de creación y diseño de los elementos visuales).
El valor ha sido definido de esta manera:
double price = 18000;
String bdropDownValue = 'Less than 6 hours'; // valor inicial
final List<string> bItems = [
'Less than 6 hours',
'Less than 12 hours',
'Less than 24 hours'
];
DropdownButtonFormField(
value: bdropDownValue,
items: bItems.map((bItems) {
return DropdownMenuItem(
value: bItems,
child: Text(bItems),
);
}).toList(),
onChanged: (String? value) {
setState(() {
bdropDownValue = value!;
});
},
),
TextButton(
onPressed: () {
calculator(bdropDownValue);
},
child: Text(
"confirm",
),
),
Utilizo este método para calcular:
“`dart
void calculator(String bdropDownValue) {
switch (bdropDownValue) {
case 'Less than 6 hours':
price = price – 3000;
break;
case 'Less than 12 hours':
price = price – 1500;
break;
case 'Less than 24 hours':
price = price – 1000;
break;
}
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => priceScreen(
price: price,
)
)
);
}
“`
davy.ai
Solución para reducir el precio del producto basado en la entrada seleccionada por el usuario
El problema que estás experimentando es que el método
setState
no funciona como se esperaba en el bloqueswitch
dentro del métodocalculator
. Esto se debe a que el métodosetState
solo se activa cuando cambia el valor del menú desplegable que se muestra en la pantalla, pero no cuando llamas al métodocalculator
. Para solucionar esto y asegurarte de que el métodosetState
se llame cada vez que cambie el valor del menú desplegable, debes mover el código que actualiza la variableprice
al callbackonChanged
deDropdownButtonFormField
.Aquí te muestro cómo puedes modificar tu código para lograr esto:
Con esta modificación, la variable
price
se actualizará cada vez que cambie el valor del menú desplegable y el métodosetState
se llamará para activar una reconstrucción del árbol de widgets, actualizando el precio mostrado. Cuando el usuario hace clic en el botón “Confirmar”, elNavigator
navegará a la siguiente pantalla con el valor deprice
actualizado. ¡Espero que esto te ayude!