Я пытаюсь получить значения, возвращенные после вызова API, но получаю следующее сообщение об ошибке:
Тело метода получения не определено для типа StreamedResponse. Попробуйте импортировать библиотеку, определяющую «тело», исправив имя на имя существующего метода получения или определив метод получения или поле с именем «тело».
Вот мой код:
loginUser() async{
try{
final uri = Uri.parse(API.loginURL);
var request = http.MultipartRequest('POST', uri);
//Send Input field data
request.fields['email'] = emailController.text;
request.fields['password'] = passwordController.text;
var response = await request.send();
if (response.statusCode == 200){
var resBody = jsonDecode(response.body);
bool success_flag = resBody['success'];
print("Login successful!");
}else{
print("Login failed!");
}
}
catch(e){
print(e.toString());
}
}
Кажется, у ответа нет тела
Вам необходимо прочитать поток ответа и преобразовать его в String, прежде чем пытаться его декодировать:
if ( response.statusCode == 200) {
var responseData = await http.Response.fromStream(response);
var resBody = jsonDecode(responseData.body);
bool success_flag = resBody['success'];
print("Login successful: $success_flag");
} else {
...
PS: не рекомендуется смешивать стили кодирования, и у вас есть CamelCase и Snake_case вместе. Придерживайтесь одного (если не уверены, просто плывите по течению и используйте один, наиболее популярный в данной экосистеме/платформе, которую вы используете).
насчет "successFlag" - да. Для единообразия придерживайтесь одного стиля. О стиле Dart см. dartwiki.com/wiki/Dart_Style_Guide/Naming_Conventions — просто используйте то, что делает большинство (вероятно, это CamelCase).
Используйте код, подобный приведенному ниже, с блоками try и catch.
final uri = Uri.parse(API.loginURL);
var request = http.MultipartRequest('POST', uri);
request.fields['email'] = emailController.text;
request.fields['password'] = passwordController.text;
var response = await request.send();
var streamedResponse = await http.Response.fromStream(response);
if (streamedResponse.statusCode == 200) {
var resBody = jsonDecode(streamedResponse.body);
bool successFlag = resBody['success'];
if (successFlag) {
print("Login successful!");
} else {
print("Login failed: ${resBody['message']}");
}
} else {
print("Login failed status code: ${streamedResponse.statusCode}");
}
Вы имеете в виду, что Success_flag должен быть SuccessFlag? И какой стиль именования переменных популярен? Я новичок во Flutter/Dart?