web-dev-qa-db-fra.com

Flutter - Comment basculer la couleur d'un RaisedButton lors d'un clic?

J'essaie de changer la couleur d'un bouton en relief. Initialement, le bouton doit être bleu et lorsqu'il est enfoncé, il devient gris. En ce moment, j'ai une valeur booléenne appelée pressAttention et elle est définie sur false. J'emploie ceci pour placer initialement ceci le faux. Lorsque le bouton est enfoncé, il bascule le booléen pressAttention, mais il semble que le widget n'est plus jamais mis à jour.

new RaisedButton(
                  child: new Text("Attention"),
                  textColor: Colors.white,
                  shape: new RoundedRectangleBorder(borderRadius: new BorderRadius.circular(30.0)),
                  color: pressAttention?Colors.grey:Colors.blue,
                  onPressed: () => doSomething("Attention"),
                )

void doSomething(String buttonName){
if(buttonName == "Attention"){
  if(pressAttention = false){
    pressAttention = true;
  } else {
    pressAttention = false;
  }
}

}

10
Chris

Ce bouton devra être créé dans le build d'un State d'un StatefulWidget, et l'État doit avoir une variable membre bool pressAttention = false;. Comme le suggère Edman, vous devez effectuer des changements d'état dans un rappel setState pour que le widget soit redessiné.

new RaisedButton(
  child: new Text('Attention'),
  textColor: Colors.white,
  shape: new RoundedRectangleBorder(
    borderRadius: new BorderRadius.circular(30.0),
  ),
  color: pressAttention ? Colors.grey : Colors.blue,
  onPressed: () => setState(() => pressAttention = !pressAttention),
);
14
Richard Heap

Si vous voulez que le bouton change de couleur pour l'état pressé, il vous suffit d'utiliser la propriété "highlightColor" dans RaisedButton

       RaisedButton(
          onPressed: () {},
          child: Text("Test"),
          highlightColor: YOUR_PRESSED_COLOR, //Replace with actual colors
          color: IDLE_STATE_COLOR,
        ),
0
king_below_my_lord