【发布时间】:2021-06-27 15:48:51
【问题描述】:
我正在尝试从 Api 获取数据,但出现以下错误:
未处理的异常:类型“_InternalLinkedHashMap
我从具有不同 Api 的视频中复制了代码,并且它工作正常。所以我猜这是定义的 API (https://api.radioking.io/widget/radio/leipzig-beatz/track/current) 的问题。
看起来错误发生在这一行:
setState(() {
users = items;
isLoading = false;
});
这是代码:
List users = [];
bool isLoading = false;
@override
void initState() {
// TODO: implement initState
super.initState();
this.fetchUser();
}
fetchUser() async {
setState(() {
isLoading = true;
});
var url =
"https://api.radioking.io/widget/radio/leipzig-beatz/track/current";
var response = await http.get(url);
// print(response.body);
if (response.statusCode == 200) {
var items = json.decode(response.body);
setState(() {
users = items;
isLoading = false;
});
} else {
users = [];
isLoading = false;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Listing Users"),
),
body: getBody(),
);
}
Widget getBody() {
if (users.contains(null) || users.length < 0 || isLoading) {
return Center(child: CircularProgressIndicator());
}
return ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
return getCard(users[index]);
});
}
Widget getCard(item) {
var title = item['title'];
return Card(
elevation: 1.5,
child: Padding(
padding: const EdgeInsets.all(10.0),
child: ListTile(
title: Row(
children: <Widget>[
SizedBox(
width: 20,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(
width: MediaQuery.of(context).size.width - 140,
child: Text(
title,
style: TextStyle(fontSize: 17),
)),
SizedBox(
height: 10,
),
],
)
],
),
),
),
);
}
【问题讨论】: