我想在listview
中显示我正在使用此API的玩家统计信息:https://cricapi.com/api/playerStats?apikey=apikey&pid=pid
上述api的输出是:
{
"pid": xxxx,
"profile": "profile description",
"imageURL": "https://www.cricapi.com/playerpic/xxxx.jpg",
pid
为每个玩家从另一个api中检索:
https://cricapi.com/api/playerFinder?apikey=apikey&name=playerName
上述api的输出是:
{
"data": [
{
"pid": xxxx,
"fullName": "Firstname Lastname",
当前,我正在第一个api中传递硬编码的pid
来显示玩家的状态,并且代码是:
FetchJson() async {
var response = await http.get(
'https://cricapi.com/api/playerStats?apikey=apikey&pid=1111');
if (response.statusCode == 200) {
String responseBody = response.body;
var responseJson = jsonDecode(responseBody);
pid = responseJson['pid'];
name = responseJson['name'];
playingRole = responseJson['playingRole'];
battingStyle = responseJson['battingStyle'];
country = responseJson['country'];
imageURL = responseJson['imageURL'];
data = responseJson;
var stats = data['data']['batting'];
var testStats = stats['tests'];
var odiStats = stats['ODIs'];
var tStats = stats['T20Is'];
// T20 Stats
matches_t = tStats['Mat'];
runs_t = tStats['Runs'];
half_t = tStats['50'];
century_t = tStats['100'];
highest_t = tStats['HS'];
avg_t = tStats['Ave'];
我正在FetchJson()
内部呼叫initState()
。
我尝试了针对类似/更早的问题How to fetch api data by passing variables (parameters)?的解决方案,但这使我走上了一条不同的道路。我无法实现该解决方案,因为我无法通过pid
会收到的第一个api返回FetchJson()
。
我的问题是:
如何从第二个api(playerFinder)检索pid
并将其提供给第一个api(playerStats),以及如何利用该pid
以便不传递硬编码的pid
,我可以将pid
作为变量传递,并且可以在UI中显示多个玩家统计信息?
所需的代码在这里:https://pastebin.com/iU8x9U8z
我想在UI中显示球员统计信息,但目前我正在传递硬编码的playerid
,该代码仅向我显示一个球员的统计信息,但是我想显示不同的球员统计信息。
**********更新*************
作为一种替代解决方案,我现在使用pids
的列表,并使用map
解析它们,并将它们传递给FetchJson()
for循环内,如下所示:
var playerIds = [{"pid":35320},{"pid":28114},{"pid":28779},{"pid":28763},{"pid":30176},{"pid":7133},{"pid":5390}]
@override
void initState() {
var intIds = playerIds.map<int>((m) => m['pid'] as int).toList();
for (int i = 0; i < intIds.length; i++) {
FetchJson(intIds[i]);
}
}
FetchJson(int ids) async {
print(ids);
var response = await http.get(
'https://cricapi.com/api/playerStats?apikey=apikey&pid=$ids');
....
}
我现在用这种方法面临的问题是,它从列表中取出最后一个pid
并在UI中重复显示其数据。我希望看到的预期输出是:UI中所有pids
的玩家数据,我不确定如何实现。
在此处完成引用的代码:https://pastebin.com/kFYBfHuf
答案 0 :(得分:1)
一个答案是从两套api向下创建Maps
到所需的播放器数据,然后使用类似于where
子句的如下所示的switch语句来识别匹配的数据。
最大的问题是您需要在两个api中标识匹配的数据项。在我的示例中,我假设它可能是球员名称,也可能是他们的球队和球队编号,但是必须有一些东西可以验证您正在寻找同一球员的不同数据点。
switch(variable_expression) {
case name = full_name: {
// statements;
}
break;
case constant_expr2: {
//statements;
}
break;
default: {
//statements;
}
break;
}