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.

Detectar qué botón se ha presionado.

Supongamos que hay varios botones creados de forma programática y hay un controlador común de botones.

onButtonClicked(){
// imprimir atributo del botón
}

¿Cómo entender dentro del controlador qué botón se ha presionado?

SIN pasar algo especial dentro de la llamada de la función. Esto no funcionará: onButtonClicked("botón" + i);

En JavaScript, por ejemplo, dentro del controlador hay $(this), que de inmediato “entiende” qué botón se ha presionado.

¿Quizás hay un mecanismo similar en Flutter? Quiero colgar atributos en el botón (sin saber cuáles de antemano) y luego tener acceso a ellos en el controlador.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En Flutter, puedes usar la propiedad onPressed de un botón para especificar una función que se llamará cuando se presione el botón. Luego puedes crear una función que reciba un parámetro y pasar esa función como propiedad onPressed de cada botón. El parámetro pasado puede ser un identificador que se pueda usar para identificar el botón que se presionó dentro de la función.

    Por ejemplo:

    // creando botones con un identificador
    List<string> buttonIds = ['button1', 'button2', 'button3'];
    List<widget> buttons = [];
    for (String id in buttonIds) {
      buttons.add(
        RaisedButton(
          onPressed: () => onButtonClicked(id),
          child: Text('Botón $id'),
        ),
      );
    }
    
    // función del manejador del botón
    void onButtonClicked(String id) {
      // utiliza el identificador para identificar el botón que se presionó
      print('Se presionó el botón $id');
    }
    

    En este ejemplo, creamos botones con identificadores y pasamos la función onButtonClicked como propiedad onPressed del botón. La función recibe el identificador del botón que se presionó y lo utiliza para identificar el botón que se presionó.

Comments are closed.