颤动 - 如何在点击时切换RaisedButton的颜色?

时间:2018-06-14 18:21:28

标签: android button dart widget flutter

我正在尝试切换凸起按钮的颜色。最初按钮应为蓝色,按下时按钮变为灰色。现在我有一个名为pressAttention的bool值,它被设置为false。我用这个来初步设置这个假。当按下按钮时,它会切换pressAttention bool,但似乎小部件永远不会再次更新。

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;
  }
}

}

3 个答案:

答案 0 :(得分:6)

此按钮需要在build的{​​{1}}的{​​{1}}中创建,并且州必须拥有成员变量State。正如Edman建议的那样,您需要在StatefulWidget回调中进行状态更改,以便重绘Widget。

bool pressAttention = false;

答案 1 :(得分:0)

如果您希望按钮更改按下状态的颜色,则只需使用RaisedButton中的“ highlightColor”属性

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

答案 2 :(得分:0)

或者您可以使用rxdart:

import 'package:rxdart/rxdart.dart';

...

bool presssedFavorite = false;
final _pressAttention = BehaviorSubject<bool>();
Observable<bool> get coursesStream => _pressAttention.stream;

...

StreamBuilder(stream: _pressAttention,
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.hasData)
  presssedFavorite = snapshot.data;

  return RawMaterialButton(
      onPressed: (){
        _addToFavorites(context);
      },
      child: Padding(
        padding: EdgeInsets.all(5),
        child: Icon(
          presssedFavorite ? Icons.favorite : Icons.favorite_border,
          color: Colors.red,
          size: 17,
        ),
      ),
    );
  },
),

void _addToFavorites(BuildContext context) async{
  //my code...
  _pressAttention.sink.add(!presssedFavorite);
}

它更复杂,但是您也可以将此解决方案与Web服务,firestore,db ...一起使用,并且可以与StatelessWidget和StatefulWidget一起使用。