как превратить отключенную кнопку в активированную кнопку в зависимости от условий - PullRequest
0 голосов
/ 23 сентября 2018

Я новичок во флаттере и пытаюсь отключить кнопку, пока некоторые текстовые поля пусты, поэтому я сделал 3 текстовых контроллера, которые будут действовать как контроллер для 3 текстовых полей, и я сделал функцию для проверкифункция:

bool isEmpty(){
    setState(() {
          if(textEditingController.text!=" "&&textEditingController2.text!=" "&& textEditingController3.text!=" "){
            isButtonEnabled=true;


          }
        });
       return isButtonEnabled; 
  }

И код для текстового поля:

TextField(
                  onSubmitted:null,

                  controller: textEditingController3,


                )

Затем я пишу код для кнопки следующим образом: Центр (

  child: RaisedButton(
         child: Text("Button 1",style: TextStyle(color:Colors.white),),
          onPressed:isButtonEnabled?(){ print("enabled");}:null,
          color: Colors.red,

            ),

Проблема в том, что кнопка остается отключенной даже после того, как я пишу в текстовые поля. Любая идея? Заранее спасибо. РЕДАКТИРОВАТЬ: благодаря @diegoveloper ответ это сработало, но что, если я хотел бы поставить intitalзначение, и я хочу, чтобы кнопка была включена, только если текстовые поля имеют значения для текстовых полей следующим образом:

@override
  void initState() {
    super.initState();
   textEditingController  = new TextEditingController(text: name);
      textEditingController2  = new TextEditingController(text: email);
         textEditingController3  = new TextEditingController(text: " place");


  }

Затем я обновил метод isEmpty:

bool isEmpty(){
    setState(() {
          if((textEditingController.text!=" ")&&(textEditingController2.text!=" ")&& (textEditingController3.text!=" ")&&(textEditingController!=null)&&(textEditingController2!=null)&&(textEditingController3!=null)){
            isButtonEnabled=true;



          }
          else{
                        isButtonEnabled=false;

          }
        });
       return isButtonEnabled; 
  }

Проблема заключается в том, что несмотря на значения входных данных, которые я дал текстовым полям, кнопка все еще отключена, также когда я редактирую 3 значения текстовых полей, кнопка включена, но если я удалил текст (в котором я думаю, что это означает nвсе) кнопка по-прежнему отключена.

1 Ответ

0 голосов
/ 23 сентября 2018

Вы можете прочитать больше о TextField здесь: https://flutter.io/cookbook/forms/text-field-changes/

Таким образом, у вас есть два варианта:

1 - прослушивать изменения для каждого TextEditingController и вызывать ваш метод isEmpty()

2 - добавьте обратный вызов onChanged для каждого TextField, который вы хотите прослушать изменения.

Опция 2

                TextField(
                          onSubmitted:null,
                        onChanged: (val){
                          isEmpty();
                        },
                          controller: textEditingController3,


                        )

Примечание: не забудьте добавить условие ELSE в ваш метод isEmpty.

Редактировать

Измените метод initState, чтобы проверить, включена ли ваша кнопка (измените код, пожалуйста,)

        @override
          void initState() {
            super.initState();
           textEditingController  = new TextEditingController(text: name);
              textEditingController2  = new TextEditingController(text: email);
                 textEditingController3  = new TextEditingController(text: " place");

          if((textEditingController.text.trim()!="")&&(textEditingController2.text.trim()!="")&& (textEditingController3.text.trim()!=""){
                    isButtonEnabled=true;

                  }
                  else{
                                isButtonEnabled=false;

                  }
          }
          }
...