Flutter - значение по умолчанию в раскрывающемся списке - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь отправить элемент в одно представление.Этот элемент будет элементом по умолчанию в раскрывающемся списке второй страницы.Я использую что-то подобное на первой странице

  onTap: () {
                        Navigator.push(
                            context,
                            new MaterialPageRoute(
                                builder: (context) => new SummaryPage(,
                                    dropdownItem: dropdownSelection)));
                      } 

Затем на второй странице я создаю будущее, чтобы получить все элементы в раскрывающемся списке, и метод initstate для установки раскрывающегося элемента по умолчанию

 List data = List();

 Future<Null> getEstates() async {
    final response = await http
        .get('URL'
    }).catchError((error) {
      print(error.toString());
    });
    final responseJson = json.decode(response.body);
    final getBody = responseJson['body'];
    setState(() {
      data = getBody;
      loading = false;
    });
  }


 void initState() {
    super.initState();     

     setState(() {
          dropdownSelection = widget.dropdownItem.toString();
        });

getEstate возвращает это

[{id: 1, описание: Terreno Rio}, {id: 2, описание: Terreno Asier}]

Выпадающий список выглядит примерно так

child: ButtonTheme(
                    alignedDropdown: true,
                    child: new DropdownButton<String>(
                      isDense: true,
                      hint: new Text("Search...",
                          textAlign: TextAlign.center),
                      value: dropdownSelection,
                      onChanged: (String newValue) {
                        setState(() {
                          dropdownSelection = newValue;
                      },
                      items: data.map((item) {
                        return new DropdownMenuItem<String>(
                          child: new Text(
                            item['description'],
                          ),
                          value: item['id'].toString(),
                        );
                      }).toList(),
                    ),
                  ),

Отображаемая ошибка:

value == null ||items.where ((DropdownMenuItem item) => item.value == value) .length == 1 ': не соответствует действительности

Видимо, код в порядке, но когда я перехожу ко второму виду, отображаетсяошибка просмотра около 1 секунды, а затем показать вторую страницу.Я думаю, что значение может быть загружено слишком рано, и выпадающий список не может быть установлен правильно.Любая идея, почему эта ошибка происходит и как я могу их исправить?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Это потому, что в первый раз у вас нет никакого значения (ваш список пуст), поэтому вы можете отобразить CircleProgressIndicator, например:

        child: data.length > 0 ? ButtonTheme(
                        alignedDropdown: true,
                        child: new DropdownButton<String>(
                          isDense: true,
                          hint: new Text("Buscar..",
                              textAlign: TextAlign.center),
                          value: dropdownSelection,
                          onChanged: (String newValue) {
                            setState(() {
                              dropdownSelection = newValue;              
                          },
                          items: data.map((item) {
                            return new DropdownMenuItem<String>(
                              child: new Text(
                                'Finca: ' + item['descripcion'],
                              ),
                              value: item['id'].toString(),
                            );
                          }).toList(),
                        ),
                      ),
                    ) : Center(child: CircularProgressIndicator()),
0 голосов
/ 30 ноября 2018

Там может быть две вещи неправильно, что я могу думать с вашим кодом:

  1. значение элемента DropdownMenutItem не является уникальным, т.е.некоторые идентификаторы повторяются.
  2. идентификатор, который вы передаете PageTwo, не совпадает ни с одним из идентификаторов в меню.

Я бы предложил использовать только int idвместо String в качестве значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...