[英]Flutter/Dart Unhandled Exception: type 'String' is not a subtype of type 'Map<String, dynamic>' in type cast
[英]Dart,Flutter: Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>' in type cast
我想弄清楚如何处理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();
}
}
我希望能帮助:
var responseData= json.decode(response.body);
var allData = responseData['data'] as List<dynamic>;
List<CCData> ccDataList = [];
allData.forEach((val){
var record = CCData(name: val['name'],
symbol: val['symbol'], rank: val['rank'], price: val['priceUSD']);
ccDataList.add(record);
});
你的问题在这一行
var allData = (json.decode(response.body) as Map)['data'] as Map<String, dynamic>;
显然, (json.decode(response.body) as Map)['data']
返回一个dynamic
List
,该List
不能通过转换转换为Map
(不是通过这种方式)。
要解决此问题,您应该删除as Map<String, dynamic>
然后如果你需要将它转换为Map
,你应该写
var myMap = (json.decode(response.body) as Map)['data'].asMap();
print(myMap); //{0: map1,1: map2, 2: map3}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.