json - Flutter Dart http Type Response不是字符串错误的子类型

标签 json rest http flutter dart

我正在尝试显示从http请求中获取的图片,但出现此错误“类型响应不是字符串类型的子类型”。首先,我获取最近添加的专辑列表,然后获取封面ID,并将其放入url,然后将该请求发送到api。 api发送回图像。
页:

class RecentlyAddedAlbums extends StatefulWidget {
  @override
  _RecentlyAddedAlbumsState createState() => _RecentlyAddedAlbumsState();
}

class _RecentlyAddedAlbumsState extends State<RecentlyAddedAlbums> {
  Future<List<Album>> albums;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: FutureBuilder(
            future: fetchRecentlyAddedAlbums(),
            builder: (context, AsyncSnapshot<List<Album>> data) {
              switch (data.connectionState) {
                case ConnectionState.none:
                  return Text(
                    "none",
                    style: TextStyle(color: Colors.black),
                  );
                case ConnectionState.waiting:
                  return Center(
                      child: CircularProgressIndicator(
                    valueColor: AlwaysStoppedAnimation<Color>(Colors.black),
                  ));
                case ConnectionState.active:
                  return Text('');
                case ConnectionState.done:
                  if (data.hasData) {
                    List<Album> albums = data.data;
                    return ListView.builder(
                      itemCount: albums.length,
                      itemBuilder: (context, index) {
                        return FutureBuilder(
                            future: recentAlbumArt(albums[index].coverArt),
                            builder: (context, AsyncSnapshot data) {
                              switch (data.connectionState) {
                                case ConnectionState.none:
                                  return Text(
                                    "none",
                                    style: TextStyle(color: Colors.black),
                                  );
                                case ConnectionState.waiting:
                                  return Center(
                                      child: CircularProgressIndicator(
                                    valueColor: AlwaysStoppedAnimation<Color>(
                                        Colors.black),
                                  ));
                                case ConnectionState.active:
                                  return Text('');
                                case ConnectionState.done:
                                  if (data.hasData) {
                                    return Image.network(data.data);
/*                                     return GridView.count(
                                      padding: const EdgeInsets.all(20),
                                      crossAxisCount: 2,
                                      children: <Widget>[
                                        ListView.builder(
                                            scrollDirection: Axis.vertical,
                                            shrinkWrap: true,
                                            itemBuilder: (context, index) {
                                              return ListTile(
                                                title: Image.network(
                                                    (data.data)[index]),
                                              );
                                            })
                                      ],
                                    ); */
                                  }
                              }
                            });
                      },
                    );
                  }
              }
            }),
      ),
    );
  }
}

最近添加的功能:
Future<List<Album>> fetchRecentlyAddedAlbums() async {
  try {
    var salt = randomToken(6);
    var token = makeToken("$password", "$salt");
    var uRL =
        "$server/rest/getAlbumList?u=$username&t=$token&s=$salt&v=$tapeOutVerison&c=$client$format&type=newest";
    var authresponse = await http.get(uRL);
    if (authresponse.statusCode == 200) {
      var jsondata = jsonDecode(authresponse.body);
      var data = apicallFromJson(jsondata);
      var aresponse = data.subsonicResponse.albumList.album;
      return aresponse;
    } else {
      return null;
    }
  } catch (e) {
    return null;
  }
}
封面功能
Future recentAlbumArt(String coverArtID) async {
  try {
    var salt = randomToken(6);
    var token = makeToken("$password", "$salt");
    var uRL =
        "$server/rest/getCoverArt/?u=$username&t=$token&s=$salt&v=$tapeOutVerison&c=$client$format&id=$coverArtID";
    return await http.get(uRL);
  } catch (e) {
    print(e);
  }
}
专辑类别:
class Album {
  Album({
    this.id,
    this.parent,
    this.isDir,
    this.title,
    this.album,
    this.artist,
    this.genre,
    this.coverArt,
    this.playCount,
    this.created,
    this.year,
  });

  String id;
  String parent;
  bool isDir;
  String title;
  String album;
  String artist;
  String genre;
  String coverArt;
  int playCount;
  DateTime created;
  int year;

最佳答案

此函数返回http响应:

return await http.get(uRL); 
如果希望获取响应的内容,则需要这样获取正文:
var response = await http.get(uRL);
return response.body;

关于json - Flutter Dart http Type Response不是字符串错误的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62567093/

相关文章:

php - GET 与 POST 最佳实践

linux - 如何从命令行使用 JSON 有效负载进行 HTTP 请求/调用?

json - Scala Play json 转换器,如果满足条件,则从输入 json 中修剪分支

json - 从 Go 中的流中打印/记录完整的非结构化 json

rest - Groovy 内置 REST/HTTP 客户端?

ios - swiftydropbox 和服务器端访问 token 的使用

java - 使用 CrudRepository 检索多行

javascript - 清理充满具有 1 个属性的对象的 JSON 对象

node.js - URL 中的尾部斜线是什么?

web-services - 哪个 HTTP 动词适合处理文件并返回结果?