Я хочу, чтобы мои кнопки (белый цвет) были зелеными, если пользователь выбирает правильный ответ, и красными, если неправильный, а затем правильным зеленым - PullRequest
0 голосов
/ 09 мая 2020
RaisedButton (
  padding: EdgeInsets.fromLTRB(10.0, 8.0, 10.0, 8.0),
  elevation: 8.0,
  color: butColor ? Colors.green : Colors.red,
  shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(10)),
  onPressed: () {
    setState(() {
      if (quiz.choices[questionNumber][0] == quiz.correctAnswers[questionNumber]){
        finalScore = finalScore + 4;
        butColor = true;

      }else{
        debugPrint("Wrong");
        butColor = false;
      }

    });
  },
  child: Text(quiz.choices[questionNumber][0],
  style: TextStyle(
    fontSize: 22.0,
    fontFamily: "AlegreyaSans",
    color: Colors.black
  ),),
),

This is what I get when I try the above code

У меня есть переменная bool butColor, также установленная на false.

Когда я пытаюсь установить цвет кнопок на белый и выполнить оператор switch внутри в противном случае я все еще получаю только белые цветные кнопки.

1 Ответ

1 голос
/ 09 мая 2020

Вы можете просто установить Enum и в соответствии со значением изменить цвет кнопки. Просто создайте переменную для хранения значения перечисления. Я использовал здесь переменную buttonStatus и инициализировал ее как ButtonStatus.Unansarded

 enum ButtonStatus{Unanswered,CorrectAnswer,WrongAnswer}

    Color getButtonColor (ButtonStatus status) {
      switch (status) {
        case ButtonStatus.Unanswered: {
          return Colors.white;
        }
        break;
        case ButtonStatus.CorrectAnswer: {
          return Colors.green;
        }
        break;
        case ButtonStatus.WrongAnswer: {
          return Colors.red;
        }
        break;

        default: {
          return Colors.white;
       }
     }
   }

И затем ваш код будет обновлен следующим образом:

RaisedButton (
    padding: EdgeInsets.fromLTRB(10.0, 8.0, 10.0, 8.0),
    elevation: 8.0,
    color: getButtonColor(buttonStatus),
    shape: RoundedRectangleBorder(
    borderRadius: BorderRadius.circular(10)),
    onPressed: () {
        setState(() {
            if (quiz.choices[questionNumber][0] == 
                 quiz.correctAnswers[questionNumber]){
                    finalScore = finalScore + 4;
                    buttonStatus = ButtonStatus.CorrectAnswer;
                 }else{
                    debugPrint("Wrong");
                    buttonStatus = ButtonStatus.WrongAnswer
                }
            });
           },
    child: Text(quiz.choices[questionNumber][0],
               style: TextStyle(
               fontSize: 22.0,
               fontFamily: "AlegreyaSans",
               color: Colors.black
             ),
         ),
     ), 

Надеюсь, это то, что вы искали.

...