#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;
}