изменить цвет FlatButton Flutter onPressed - PullRequest
0 голосов
/ 23 октября 2019

Я хочу изменить цвет и текст кнопки, когда я нажимаю на нее. Но это не изменится. Я изменяю свою переменную в setState и с помощью троичного оператора устанавливаю текст и цвет. Я надеюсь, что вы можете помочь ребятам.

Container(
     padding: EdgeInsets.symmetric(horizontal: 15,vertical: 15),
     alignment: Alignment.bottomCenter,
     child: SizedBox(
            width: double.infinity, //Full width
            height: 40,
            child: FlatButton(
                child: Text( stopSelling ? "Dejar de vender" : "Empezar a vender",style: TextStyle(fontSize: 20,fontWeight: FontWeight.w300),),
                onPressed: () {
                    setState(() {
                      stopSelling = !stopSelling;
                    });
                  },
                textColor: Colors.white,
                color: stopSelling?Colors.red:Colors.green,
                shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
            )
     ),
   ),

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Ваш код идеален, но я не знаю, где вы объявляете свою переменную stopSelling, но я почти уверен, что вы объявили stopSelling внутри метода build (), поэтому вы должны объявить переменную stopSelling вне метода build () ивнутри класса (statefull или stateless).

И это жизненный цикл флаттера, согласно которому при вызове setState () тогда в то время автоматически вызывается метод build (), который будет влиять на вашу переменную так же, как и раньше.

0 голосов
/ 23 октября 2019

попробуйте это ....

Container(
      padding: EdgeInsets.symmetric(horizontal: 15,vertical: 15),
      alignment: Alignment.bottomCenter,
      child: SizedBox(
          width: double.infinity, //Full width
          height: 40,
          child: stopSelling? FlatButton(
            child: Text( stopSelling ? "Dejar de vender" : "Empezar a vender",style: TextStyle(fontSize: 20,fontWeight: FontWeight.w300),),
            onPressed: () {
              setState(() {
                stopSelling = !stopSelling;
              });
            },
            textColor: Colors.white,
            color:  Colors.red,
            shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
          ):FlatButton(
            child: Text( stopSelling ? "Dejar de vender" : "Empezar a vender",style: TextStyle(fontSize: 20,fontWeight: FontWeight.w300),),
            onPressed: () {
              setState(() {
                stopSelling = !stopSelling;
              });
            },
            textColor: Colors.white,
            color: Colors.green,
            shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
          ),
      ),
    )
...