Добро пожаловать в переполнение стека:).
Первое:
Я вижу в вашем коде ошибку опечатки.
var v = json.decode(x.body);
должно быть
var v = json.decode(res.body);
Секунда:
Как только вы исправите вышеперечисленное, вы можете столкнуться с Cross Origin Request (CORS) errorчто может быть потому, что вы не настроили это на своем сервере. Особенно, если ваше веб-приложение не работает в том же домене, что и сервер, на котором работает API. Даже если он находится на той же машине, вам придется разрешить запрос от определенного домена и портов. Если вы не знаете CORS, вы можете прочитать здесь .
Третий:
Как я вижу, вы обрабатываете ответ без проверки statusCodeответа все равно приведет к ошибке при попытке декодирования ответа.
У меня есть простой пример выполнения, основанный на общедоступном API DOGs .
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
class HttpRequestDemo extends StatefulWidget {
@override
_HttpRequestDemoState createState() => _HttpRequestDemoState();
}
class _HttpRequestDemoState extends State<HttpRequestDemo> {
String imageUrl = "";
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
Center(
child: Image.network(
imageUrl,
height: MediaQuery.of(context).size.height / 3,
width: MediaQuery.of(context).size.width / 3,
),
),
FloatingActionButton(
child: Icon(Icons.cloud_download),
onPressed: () {
fetchData();
},
)
],
));
}
fetchData() async {
final res = await http.get("https://dog.ceo/api/breeds/image/random");
if (res.statusCode == 200) {
var v = json.decode(res.body);
setState(() {
imageUrl = v['message'];
});
}
}
}
Это приложение будет показывать новую фотографию собаки каждый раз, когда вы нажимаете кнопку плавающего действия, как показано ниже, в зависимости от ответа API.
![enter image description here](https://i.stack.imgur.com/cXB4q.png)