как узнать, какой индекс элемента выбран в раскрывающемся флаттере - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в flutter, я пытаюсь сделать dropdownbutton, и я хочу, чтобы, когда пользователь нажимал на элемент, отправлял индекс этого элемента на API, и вот мой раскрывающийся список

  DropdownButton<String> androidDropdown() {
    List<DropdownMenuItem<String>> dropdownItems = [];
    final List<String> dropDownItemsdata = [
      'inprogress',
      'packing',
      'sent'
    ];
    for (String currency in dropDownItemsdata) {
      dropdownItems.add(
        DropdownMenuItem(
          child: Text(currency),
          value: currency,
        ),
      );
    }

    return DropdownButton<String>(
      items: dropdownItems,
      hint: Text(
        'change status',
        style: TextStyle(color: Colors.black, fontFamily: font),
      ),
      onChanged: (value) {

        print(value);
      },
    );
  }
}

Ответы [ 2 ]

1 голос
/ 04 августа 2020

1. Сделайте переменную var _selected = null, это выбранный вариант в раскрывающемся меню.

2. Установите значение DropDownButton в _selected.

value: _selected,

3. Предположим, у нас есть функция с именем sendToAPI, измените onChanged в DropDownButton на это:

onChanged: (value) {
        setState(() {
          _selected = value;
        });
        sendToAPI(value); // or sendToAPI(dropDownItemsdata.indexOf(value));
      },

Как показано в комментарии, вы можете использовать sendToAPI(dropDownItemsdata.indexOf(value)) для отправки индекса выбранной опции в API.

Полный код:

  var _selected = null;

  DropdownButton<String> androidDropdown() {
    List<DropdownMenuItem<String>> dropdownItems = [];
    final List<String> dropDownItemsdata = [
      'inprogress',
      'packing',
      'sent'
    ];
    for (String currency in dropDownItemsdata) {
      dropdownItems.add(
        DropdownMenuItem(
          child: Text(currency),
          value: currency,
        ),
      );
    }

    return DropdownButton<String>(
      items: dropdownItems,
      value: _selected,
      hint: Text(
        'change status',
        style: TextStyle(color: Colors.black, fontFamily: font),
      ),
      onChanged: (value) {
        setState(() {
          _selected = value;
        });
        sendToAPI(value); // or sendToAPI(dropDownItemsdata.indexOf(value));
      },
    );
  }
0 голосов
/ 04 августа 2020
          String slectedValue = "Select Any Letter"  

          Container( 
                 child:    DropdownButton<String>(
                  isExpanded: true,
                  items: ["A","B","C"].map((String value) {
                    return new DropdownMenuItem<String>(
                      value: value,
                      child: new Text(value),
                    );
                  }).toList(),
                  onChanged: (value) {
                    setState(() {slectedValue = value;});
                    },
                  hint: Text(
                    slectedValue,
                    style: TextStyle(),
            ),),);
              
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...