Как использовать, если еще, если в кнопке — флаттер

#flutter #button #conditional-statements

Вопрос:

У меня есть 2 кнопки, одна из которых-тайм-аут, а другая-тайм-аут.

Ниже приведены условия, которые должны выполняться для включения и выключения кнопки.

Кнопка «Время в» будет включена, когда :

 timeout != null  || timein == null //these timein and timeout values should comes from database, but in below code I am using variables and updating their values. i'm not using database values here.

 

и его цвет фона будет синим[500]

Кнопка «Время в» будет отключена, когда :

 timein != null amp;amp; timeout==null //these timein and timeout values should comes from database, but in below code I am using variables and updating their values. i'm not using database values here.
 

и цвет фона изменится на синий[200]

кнопка тайм-аута будет, включите, когда:

 time in != null 
 

кнопка тайм-аута отключится, когда:

 time in == null
 

Вот что я сделал.

 var t1="";
  var t2="";
  var timeIn;
  var timeOut;
  var timeInText="                 Time in";
  var timeOutText="                 Time out";
  bool timeInBttonPressed=false;
  bool timeOutButtonPressed=false;
          timein=="" || timeout!="" ?
          RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
          text:timeInText,
          bgcolor: timeInBttonPressed ?Colors.blue[200]:Colors.blue[500],
          press:(){
            setState(() {
                          timeInText="                 " getTime;
                          //timein=getTime;
                          timeOutButtonPressed=true;
                          //timeInBttonPressed=true;
                          
                        });

          })
          
          //Time in, disable:
          :
          RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
          bgcolor: Colors.blue[200],
          text:"                 " timein,
          press:(){
            setState(() {
              timeInBttonPressed=false;
                          
                        });
          })
          ),
      
   
//Time out, disable 

 timein==""?
          RoundedButton(icon: Icon(Icons.timer_off,color: Colors.white),bgcolor: Colors.blue[200],
          text: "                 Time out",color: Colors.white,
          press: (){
            setState(() {
                          timeInBttonPressed=true;
                        });
          },
          )
//time out enable
          :
          RoundedButton(icon: Icon(Icons.timer_off,color: Colors.white,),
          text: timeOutText,
          color: Colors.blue[50],
          bgcolor: timeOutButtonPressed ?Colors.blue[500]:Colors.blue[200],
          press:(){
            setState(() {
                          timeOutText="                 " getTime;
                          //timeout=getTime;
                          //timeOutButtonPressed=!timeOutButtonPressed;
                          timeInBttonPressed=true;
                        });
          })
 

Это не соответствует моим требованиям, не могли бы вы, ребята, пожалуйста, проверить это и помочь мне исправить то, что я делаю неправильно.

——————-РЕДАКТИРОВАТЬ ВОПРОС—————————

я отредактировал ваш ответ , вот код

 Widget _timein() {
   //enable
    if(timeout != ""  || timein == "") {
      return RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
              text:timeInText,
              bgcolor: timeInBttonPressed ?Colors.blue[200]:Colors.blue[500],
              press: () {
                setState(() {
                timeInText="                 " getTime;
                timein=getTime;
                //print("t1  " t1);
                timeInBttonPressed=true;
                    
                                });
                
              //Your OnPress Event
              });
    }
    //disable
      else if(timein != "" amp;amp; timeout=="") {
      return RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
              text:timeInText,
              bgcolor: Colors.blue[200]);
      } 
    }


     Widget _timeout(){
   //enable
      if(timein != "") {
        return RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
              text:timeOutText,
              bgcolor: timeOutButtonPressed ?Colors.blue[200]:Colors.blue[500],
              press: () {
                setState(() {
                timeOutText="                 " getTime;
                timeout=getTime;
                //print("t2   " t2);
                //timeOutButtonPressed=true;      
                timeInBttonPressed=true; 
                                });
                
        });

      }
      //disable
      else if(timein == "") {
        return RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
              text:timeOutText,
              bgcolor: Colors.blue[200]);
      }
 }
 

это работает так: сначала я включил кнопку «Время» и отключил кнопку «тайм-аут», что правильно, затем, когда я нажимаю кнопку «Время», ее текст меняется на текущее время, и она отключается, а кнопка «тайм-аут» включается, что правильно, но когда я нажимаю кнопку «тайм-аут», ее текст меняется на время, но цвет не меняется. я хочу отключить его после нажатия, и кнопка «Время в» будет включена, и наоборот.
надеюсь, ты понял мою точку зрения.

Комментарии:

1. В описании вы упомянули тайм-аут и тайм-аут, но в фрагменте кода вы используете t1 и t2?

2. да, я упоминал, что эти значения времени и времени ожидания поступают из базы данных, но для тестирования (без использования базы данных) я использую переменную

3. позвольте мне отредактировать сообщение для вашего удобства, чтобы вы могли понять

4. @MuhammadAhmed проверьте вопрос сейчас, я отредактирую его.

Ответ №1:

Прежде всего "" != null . Вы сравниваете время и время ожидания с пустой строкой. Другое дело-создать отдельную функцию, чтобы сделать ее читаемой.

 Widget _timer() {
 if(timeout != null  || timein == null) {
   return RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
          text:timeInText,
          bgcolor: timeInBttonPressed ?Colors.blue[200]:Colors.blue[500],
          onPress: () {
           //Your OnPress Event
          })

 } else if(timein != null amp;amp; timeout==null) {
   return RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
          text:timeInText,
          bgcolor: timeInBttonPressed ?Colors.blue[200]:Colors.blue[500])
  } 
  else if(timein != null) {
    return RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
          text:timeInText,
          bgcolor: timeInBttonPressed ?Colors.blue[200]:Colors.blue[500],
          onPress: () {
    //Your On Press Event
    })

  }
  else if(timein == null) {
    return RoundedButton(icon: Icon(Icons.timer,color: Colors.white),
          text:timeInText,
          bgcolor: timeInBttonPressed ?Colors.blue[200]:Colors.blue[500])
  }
 

Если вы хотите отключить событие щелчка, не добавляйте это свойство onPress
}

Комментарии:

1. Спасибо, но это все еще не соответствует моим требованиям, я редактирую свой пост, пожалуйста, проверьте его.