es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mostrar el icono correcto en IconButton en Flutter

Tengo un botón en la AppBar y quiero cambiar su icono al hacer clic, pero nada funciona.
Si verificas el tipo de icono dentro de onPressed, entonces la condición se activa según el botón que deba ser, pero no se muestra.

bool toggle = true;
late Widget searchWidget = IconButton(
  onPressed: (){
    setState(() {
      toggle = !toggle;
    });
  },
  icon: toggle ? const Icon(Icons.search) : const Icon(Icons.cancel),
);

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      actions: [
        searchWidget,
        ],
      title: searchBar
    ),
    body: displayBody,
    bottomNavigationBar: _bottomMenu,
  );
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay algunas cosas que puedes intentar para resolver este problema. En primer lugar, asegúrate de haber incluido el mixin “stateful widget” (widget con estado) en la definición de tu clase:

    class MyWidget extends StatefulWidget {
      @override
      _MyWidgetState createState() => _MyWidgetState();
    }
    
    class _MyWidgetState extends State<mywidget> {
      // tu código aquí
    }
    

    A continuación, verifica que la función onPressed se esté ejecutando realmente añadiendo una declaración de impresión de depuración:

    onPressed: () {
      setState(() {
        toggle = !toggle;
      });
      print("Botón presionado");
    }
    

    Si la declaración de impresión no aparece en tu consola, significa que la función onPressed no se está llamando y deberás investigar por qué.

    Si la función onPressed se está llamando pero el ícono no cambia, puedes intentar forzar una actualización del árbol de widgets envolviendo el widget IconButton en un widget Builder:

    late Widget searchWidget = Builder(
      builder: (context) => IconButton(
        onPressed: () {
          setState(() {
            toggle = !toggle;
          });
        },
        icon: toggle ? const Icon(Icons.search) : const Icon(Icons.cancel),
      ),
    );
    

    Esto debería forzar al widget a actualizarse después de que se llame a la función onPressed.

    Si ninguna de estas soluciones funciona, es posible que quieras considerar publicar tu código en un foro como Stack Overflow o en la comunidad de desarrolladores de Flutter para obtener ayuda adicional.

Comments are closed.