Невозможно независимо изменить значения нескольких выпадающих меню в Flutter - PullRequest
0 голосов
/ 18 апреля 2019

Предоставлена ​​функция, которая создает выпадающее меню, принимающее параметры:

  1. variableToBeAdded (переменная, которая будет добавлена ​​в базу данных Firebase)

2.placeholderText (текст для подсказки)

  1. массив элементов, которые создают dropDownMenuItems.

Эта функция используется в форме для получения информации от пользователя.

Проблема в том, что когда на строку _gender ссылаются явно, т.е. не как на параметр функции, значение раскрывающегося меню изменяется. Однако при обращении к параметру thevariableToBeAdded он больше не работает, что меня озадачивает, так как они должны быть точно такого же примитивного типа (String). Я бы скорее написал повторно используемый код, чем копировал и вставлял для каждого пункта выпадающего меню, который я собираюсь иметь в форме Мне нужно около 7.

Я должен также упомянуть, что все это происходит в StatefulWidget

Я попытался изменить место, где объявлено новое значение variableToBeAdded, в onChange setState или нет. Я также исследовал объявление String в initState () безуспешно

List<String> gendersArray = <String>["Male", "Female", "Other",];

final _formKey = GlobalKey<FormState>();
String _gender;

dropdownMenu(String variableToBeAdded, String placeholderText, array) {
    variableToBeAdded.toString();
    return new Container(
        child: new DropdownButton<String>(
            isExpanded: true,
            hint: Container(
              alignment: Alignment.centerLeft,
              padding: EdgeInsets.only(bottom: 7.0),
              child: text(placeholderText, Colors.grey.shade600, 15.0),
              //text is a function that does the text styling
            ),
            value: variableToBeAdded,
            items: array
                .map<DropdownMenuItem<String>>((String value) {
              return DropdownMenuItem<String>(
                value: value,
                child: Container(
                  child: text(value, Colors.black, 15.0),
                ),
              );
            }).toList(),
            onChanged: (s) {
              setState(() {
                variableToBeAdded = s;
              });
            }
        )
    );
  }

//In the form (in the build) call the function 
               Form(
                  key: _formKey,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    children: <Widget>[
                      SizedBox(height: 10.0),
                      dropdownMenu(_gender, "Gender", gendersArray),
                      SizedBox(height: 10.0),
                      ),
                    ],
                  ),
                ),

Когда onChanged вызывает _gender String внутри функции. например

onChanged: (s) {
              setState(() {
                _gender = s;
              });
            }

Ожидаемый результат: выпадающие значения меняются при их нажатии. Фактический результат: значения изменены.

Когда onChanged вызывает параметр variableToBeAdded. например,

onChanged: (s) {
              setState(() {
                variableToBeAdded = s;
              });
            }

Ожидаемый результат: выпадающие значения меняются при их нажатии. Фактический результат: без изменений

...