возвращает экземпляр ‘_Future<Список>’ вместо json

#json #flutter #api #dart

Вопрос:

у меня есть API, который возвращает список мест в формате JSON, и он хорошо работает на postman, но я не могу заставить его вернуть его на Flutter.

вот функция, которая возвращает все места

 Future<List<PlacesModel>> getAllPlaces() async {
  final Storage _localStorage = window.localStorage;
  List<PlacesModel> allPlaces = [];

  Map<String, String> headers = {
    'Content-type': 'application/json',
    'Authorization': 'Bearer ${_localStorage['token']}'
  };
  final allPlacesURl = Uri.parse("http://localhost:3000/common/getPlaces/0");

  var response = await http.get(allPlacesURl, headers: headers);
  if(response.statusCode == 200)
    {
      final decodee = "["   response.body  "]";
      List body = json.decode(decodee);
      allPlaces = body.map((e) => PlacesModel.fromJson(e)).toList();
      return allPlaces;
    }
}
 

но он просто возвращается Instance of '_Future<List<PlacesModel>>' вместо фактического списка json.

Ответ №1:

Если вы действительно хотите передать список json вместо списка определенной вами модели размещения, перейдите к следующему фрагменту кода, и вызов функции должен быть таким:

 //function call
var result = await getAllPlaces();// has the json map required and this can further be processed as a json.


//function definition
Future getAllPlaces() async {
  final Storage _localStorage = window.localStorage;

  Map<String, String> headers = {
    'Content-type': 'application/json',
    'Authorization': 'Bearer ${_localStorage['token']}'
  };
  final allPlacesURl = Uri.parse("http://localhost:3000/common/getPlaces/0");

  var response = await http.get(allPlacesURl, headers: headers);
  if(response.statusCode == 200)
    {
      return response.body;
    }
  else{
      return null;
    }
}
 

Комментарии:

1. в нем есть следующая ошибка: Значение типа «Строка» не может быть возвращено из функции «getAllPlaces», потому что оно имеет тип возврата » Будущее<Список<PlacesModel><PlacesModel>>».

2. обновили фрагмент кода, пожалуйста, проверьте.

3. и, если возможно, пожалуйста, поделитесь ответом от api.

Ответ №2:

Где вы звоните getAllPlaces , используйте await перед этим:

 List<PlacesModel> someList = await getAllPlaces();
 

Комментарии:

1. у меня есть, теперь там написано » [Экземпляр «PlacesModel»]»

2. Вот список, который вам нужен. Просто введите параметр, который вы хотите, из модели места, например id name , или что у вас там внутри. Это связано с тем, что в вашем классе нет метода to string. Однако это отвечает на ваш вопрос.

Ответ №3:

ЗАМЕНИТЕ ЭТО:

 if(response.statusCode == 200)
    {
      final decodee = "["   response.body  "]";
      List body = json.decode(decodee);
      allPlaces = body.map((e) => PlacesModel.fromJson(e)).toList();
      return allPlaces;
    }
 

с:

     if(response.statusCode == 200)
    {
      return response.body;
    }