【发布时间】:2020-06-28 07:45:29
【问题描述】:
我想弄清楚如何处理JSON。问题是错误:
"Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>' in typecast ".
在 API 示例中,有一个数组,但无论我如何尝试调用它,都没有结果。请求帮忙。另外,请不要因为语法而扔拖鞋。我的英语写作或说得不好。
import 'package:flutter/material.dart';
import 'package:flutterapp/CCData.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class CCList extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return CCListState();
}
}
class CCListState extends State<CCList>{
List<CCData> data = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('ЛОТОС-РЕСТОРАН'),
),
body: Container(
child: ListView(
children: _buildList(),
)
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.refresh),
onPressed: () => _loadCC(),
),
);
}
_loadCC() async{
final response = await http.get('https://api.coincap.io/v2/assets?limit=4');
if(response.statusCode == 200){
//print(response.body);
var allData = (json.decode(response.body) as Map)['data'] as Map<String, dynamic>;
var ccDataList = List<CCData>();
allData.forEach((String key, dynamic val){
var record = CCData(name: val['name'],
symbol: val['symbol'], rank: val['rank'], price: val['priceUSD']);
ccDataList.add(record);
});
print(ccDataList);
}
}
List<Widget> _buildList(){
return data.map((CCData f) => ListTile(
title: Text(f.symbol),
subtitle: Text(f.name),
leading: CircleAvatar(
child: Text(f.rank.toString())),
trailing: Text('\$${f.price.toString()}'),
)).toList();
}
}
【问题讨论】:
-
你会在这里添加你的
CCDataModel 类吗 -
你也可以添加一个示例 json 吗?
-
print(response.body) 的输出是什么?我猜这行 var allData = (json.decode(response.body) as Map)['data'] as Map
;应改为 var allData = (json.decode(response.body) as Map)['data'] as List ;