繁体   English   中英

Dart,Flutter:异常:键入“列表”<dynamic> &#39; 不是类型 &#39;Map 的子类型<String, dynamic> &#39; 在类型转换中

[英]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.

相关问题 Flutter/Dart 未处理异常:“String”类型不是“Map”类型的子类型<String, dynamic> &#39; 在类型转换中 未处理的异常:键入“列表”<dynamic> ' 不是类型 'Map 的子类型<string, dynamic> ' 在飞镖/ flutter</string,></dynamic> Dart 未处理的异常:键入“列表”<dynamic> ' 不是类型 'Iterable 的子类型<map<dynamic, dynamic> &gt;' 类型转换</map<dynamic,></dynamic> 输入“列表<dynamic> ' 不是 'Map 类型的子类型<string, dynamic> ' 在类型转换中</string,></dynamic> 例外:“字符串”类型不是“地图”类型的子类型<dynamic, dynamic> ' 在 flutter 的类型中</dynamic,> 在颤动中获取项目时出现此错误“错误异常:键入&#39;列表<dynamic> &#39; 不是类型 &#39;Map 的子类型<String, dynamic> &#39; 在类型转换中&quot; 颤振 - _CastError(类型&#39;列表<dynamic> &#39; 不是类型 &#39;List 的子类型<Map<String, dynamic> &gt;&#39; 在类型转换中) Flutter 中的递归小部件 - 类型“列表”<dynamic> ' 不是类型 'List 的子类型<map<string, dynamic> &gt;' 类型转换</map<string,></dynamic> Flutter:InternalLinkedHashMap<string, dynamic> ' 不是类型 'List 的子类型<dynamic>在类型转换中</dynamic></string,> 未处理的异常:类型 '_InternalLinkedHashMap<string, dynamic> ' 不是类型 'List 的子类型<dynamic> ' 在请求中的类型转换 flutter</dynamic></string,>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM