Отображение json данных при выборе элемента из списка предложений - PullRequest
0 голосов
/ 09 мая 2020

Я хочу получить и показать данные соответствующего игрока, когда его имя выбрано из списка предложений. У меня есть виджет AutoCompleteTextField, с помощью которого имя игрока набирается и выбирается из списка, как показано ниже:

enter image description here

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

enter image description here

Но когда я нажимаю в поле поиска и снова выберите того же игрока из списка предложений, затем будет выполнен вызов api и данные будут отображаться правильно, как показано ниже:

enter image description here

Текущий код включен itemSubmitted параметр AutoCompleteTextfield, я вызываю метод, который показывает данные внутри setState(), как показано ниже:

itemSubmitted: (item) {
                  setState(() {
                    searchTextField.textField.controller.text = item.name;
                    textInput = true;
                    showData();
                  });
                },

Внутри showData(), я разбираю json на входной поиск в поле, и если данные игрока найдены, я делаю еще один вызов внутри того же метода для получения данных, как показано ниже:

showData() {
    String input = searchTextField.textField.controller.text.toLowerCase();
    found = false;

    for (var i = 0; i < PlayerViewModel.players.length; i++) {
      if (PlayerViewModel.players[i].name.toLowerCase() == input) {
        players = PlayerViewModel.players[i];
        found = true;
        break;
      }
    }
    if (found) {
      fetchJson(players.pid);
    }
  }

  void fetchJson(int pid) async {
    var response = await http.get(
        'http://cricapi.com/api/playerStats?apikey=<apiKey>&pid=$pid');
    if (response.statusCode == 200) {
      String responseBody = response.body;
      var responseJson = jsonDecode(responseBody);
      name = responseJson['name'];
      playingRole = responseJson['playingRole'];
      battingStyle = responseJson['battingStyle'];
      country = responseJson['country'];
      imageURL = responseJson['imageURL'];
      data = responseJson;

Данные извлекаются правильно, но не запускаются с первой попытки, когда я выбрать игрока из списка, но только со второй попытки, когда я снова выберу игрока из списка. И это происходит при каждом последующем поиске игрока. Что мне здесь не хватает? Как получить и показать данные, как только имя игрока выбрано из списка предложений?

1 Ответ

0 голосов
/ 09 мая 2020

Вы должны реализовать FutureBuilder, в котором будущее - это fetch Json (), который возвращает данные. Также попробуйте посмотреть, что он вернет.

   if (found) {
      fetchJson(players.pid).then(print);
    } 
...