Показать текстовое поле в правильной категории из DropdownButton - PullRequest
0 голосов
/ 22 апреля 2020

Как показать мой виджет только тогда, когда в моем раскрывающемся меню выбрана одна из опций?

Я пробую это:

  showWidgetOnCategory() async {
    if(_selectedCategory == 'FREE'){
       _buildCountPerson();
    }
  }

  Widget _dropdownCategory(){
    return Padding(
      padding: EdgeInsets.only(left:0), 
      child: DropdownButton(
        isExpanded: true,
        hint: Text('Type', style: TextStyle(color: Colors.grey.shade300),),
        value: _selectedCategory,

        onChanged: (newValue){
          setState(() async {
            _selectedCategory = newValue;
          });
        },
        items: _categories.map((category){
          return DropdownMenuItem(
            child: new Text(category, style: TextStyle(color: Colors.black),),
            value: category,
          );
        }).toList(),
      )
    );
  }


  _buildCountPerson(){
    double width = MediaQuery.of(context).size.width;
    double height = MediaQuery.of(context).size.height;
    return Container(
      child: Row(
        children: <Widget>[
              Padding(
                padding: EdgeInsets.only(right: 15),
                child: Text('Liczba miejsc:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
              )),
              SizedBox(
                width: 120,
                height: 50,
                child: TextFormField(
                  keyboardType: TextInputType.number,
                  controller: _countPersonOnEventController,
                  decoration: InputDecoration(
                    hintText: '0',
                        border: new OutlineInputBorder(
                        borderSide: new BorderSide(color: Colors.teal)
                      ),
                  ),
                  validator: (String value) {
                      if(value.isEmpty){
                        return 'Pole wymagane';
                      }else return null;
                    },
                    onSaved: (String value) {
                      _count = int.parse(value);
                      print(_count);
                    },
                  )
              )

        ],
      ));
  }

, но это не работает, кто-нибудь знает, как помочь мне?

//////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////

1 Ответ

1 голос
/ 22 апреля 2020

Вы можете вначале принять логическое значение droDownSelected = false, а затем в методе DropCown onChanged установить для него значение true, чтобы можно было отображать другой виджет. Вы можете отображать виджеты по условию следующим образом.

bool droDownSelected = false;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        DropdownButton(), // in onChanged method setState droDownSelected to true so below widget is shown
        droDownSelected ? WidgetYouWantToShow() : SizedBox(),
      ],
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...