【发布时间】:2020-07-05 16:49:18
【问题描述】:
从一个 api 我得到一个带有封面艺术 id 的专辑列表,我把这个列表放入一个函数中,以从 api 获取封面艺术的 URL。我的问题是我正在尝试将 URL 转换为列表,但出现错误:“类型字符串不是列表的子类型”。如果我不尝试将其转换为列表,则 URL 很好,但我无法访问单个 URL,因此我可以将其显示在网格列表中。当我尝试将其编入索引时,它会返回单个字母而不是单个 URL。
class _RecentlyAddedAlbumsState extends State<RecentlyAddedAlbums> {
Future<List<Album>> albums;
List<String> coverARTLIST;
@override
Widget build(BuildContext context) {
return Scaffold(
/* backgroundColor: Colors.black, */
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 cover) {
switch (cover.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 (cover.hasData) {
List<String> coverARTLIST = cover.data;
print(coverARTLIST);
return GridView.count(
scrollDirection: Axis.vertical,
crossAxisCount: 2,
shrinkWrap: true,
padding: const EdgeInsets.all(5),
crossAxisSpacing: 10,
children: <Widget>[Text("TEST")],
);
}
}
});
},
);
}
}
}),
),
);
}
}
封面功能:
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 uRL.toString();
} catch (e) {
print(e);
}
}
【问题讨论】: