Флаттер DropdownButton условия не работают - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть список значений, предназначенных для анализа в выпадающую кнопку с JSON из остальных API. Значения разбираются хорошо и хорошо, но я применил условие, что, когда нет списка значений, доступных для отображения, он должен просто показать один текст в выпадающем списке, говорящий «нет оборудования». Но по какой-то причине это не работает.

Мой код:

List data = List();
Future<String> getSWData() async {
    setState(() {
      isLoading = true;
    });
        var res = await http
            .get(Uri.encodeFull(url), headers: {"Accept": "application/json"});
        resBody = json.decode(res.body);

        setState(() {
          data = resBody;
          isLoading = false;
        });


        return "Sucess";

    }
    child: DropdownButton(
                          hint: new Text(
                            "Select Equipment",
                            style: style,
                          ),
                          style: style,
                          onChanged: (newVal) {
                            setState(() {
                              _mySelectionEquipment = newVal;
                            });
                          },
                          value: _mySelectionEquipment,
                          items: data.map((item) {
                            return new DropdownMenuItem(
                              child: Row(
                                children: <Widget>[
                                  Text(item['EquipmentMake'] ??
                                      "No Equipment Registered"),
                                  SizedBox(
                                    width: 5,
                                  ),
                                  SizedBox(
                                    width: 5,
                                  ),
                                  Text(item['EquipmentModel'] ?? ""),
                                ],
                              ),
                              value: item['EquipmentID'].toString(),
                            );
                          }).toList(),

                          isExpanded: false,
                        ),

1 Ответ

2 голосов
/ 21 апреля 2020

Вы называете карту пустым списком

Попробуйте что-то вроде этого:

  items: data.length > 0
                                ? data.map((item) {
                                    return new DropdownMenuItem(
                                      child: Row(
                                        children: <Widget>[
                                          Text(item['EquipmentMake'] ??
                                              "No Equipment Registered"),
                                          SizedBox(
                                            width: 5,
                                          ),
                                          SizedBox(
                                            width: 5,
                                          ),
                                          Text(item['EquipmentModel'] ?? ""),
                                        ],
                                      ),
                                      value: item['EquipmentID'].toString(),
                                    );
                                  }).toList()
                                : [
                                    DropdownMenuItem(
                                        child: Row(
                                          children: <Widget>[
                                            Text("No Equipment Registered"),
                                            SizedBox(
                                              width: 5,
                                            ),
                                            SizedBox(
                                              width: 5,
                                            ),
                                            Text(""),
                                          ],
                                        ),
                                        value: 0.toString())
                                  ],
...