【问题标题】:type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'List<dynamic>' 的子类型
【发布时间】:2021-01-30 14:33:23
【问题描述】:

我是 Flutter 的初学者。我在获取这样的 JSON 响应时出错。

{
    dataKey: [
      {
        key1: value1,
        key2: value2,
        key3: value3,
      } 
    ] 
}

我一直在论坛里找这个问题,发现是这样的。

Map<String, dynamic> map = json.decode(response.body);
List<dynamic> data = map["dataKey"];
print(data[0]["name"]);

但我不明白如何编写函数。这是我的代码。

Future<Map> getData() async {
var response = await http.get(
    'https://api.batulimee.com/v1_ship/port_detail?port_id=${widget.list[widget.index] 
['port_id'].toString()}');
return json.decode(response.body) as Map<String, dynamic>;
}

FutureBuilder<Map>(
          future: getData(),
          builder: (context, snapshot) {
            if (snapshot.hasError) print(snapshot.error);
            return snapshot.hasData
                ? new Ports(
                    list: snapshot.data['data'],
                  )
                : new Container();
          },
        ),

class Ports extends StatelessWidget {
final List list;
Ports({this.list});

@override
Widget build(BuildContext context) {
return ListView.builder(
  scrollDirection: Axis.horizontal,
  shrinkWrap: true,
  itemCount: list.length,
  itemBuilder: (context, i) {
    return Card(
      child: Container(
        padding: EdgeInsets.all(8),
        color: Colors.red,
        child: Text(
          list[i]['port_website'].toString(),
          style: TextStyle(color: Colors.white, fontSize: 24),
        ),
      ),
    );
  },
);
}
}

还有这样的错误。

type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'

很抱歉问了同样的问题,因为我不明白:(。谢谢你的帮助

【问题讨论】:

  • response 得到了什么?能打印出来吗?
  • 好像是上面的 JSON 响应
  • Map&lt;String, dynamic&gt; map = json.decode(response.body); List&lt;dynamic&gt; data = map["dataKey"]; print(data[0]["key1"]); 打印出value1吗?
  • 我从论坛获得了该功能代码,但我不知道如何将其写入我的代码中。 :(
  • stackoverflow.com/questions/55430061/… 我从这里得到了问题的解决。但不知道如何实现它

标签: json flutter dart


【解决方案1】:
  //define your model in defineModel
  Map<int, defineModel> yourMap = {};

和get方法:

      Future<void> getFavoriteList() async {
        try {
          final response = await http.get('url');
          final extractedData = json.decode(response.body);
          if (extractedData == null) {
            return;
          }
          final Map<int, defineModel> loadedProducts = {};
        
          final lastExtract = extractedData['dataKey'];
            
          lastExtract.forEach((prodData) {
            loadedProducts.putIfAbsent(
            //you Must Define A UniqueKey in here
              key,
              () => defineModel(
                key1: prodData['key1'],
                key2: prodData['key2'],
                key3: prodData['key3'],
              ),
            );
          });        
          yourMap = loadedProducts;
        } catch (error) {
          throw (error);
        }
      }

【讨论】:

  • 对不起,但我不明白:\。谢谢你回答顺便说一句
猜你喜欢
  • 2020-07-03
  • 2019-04-03
  • 2021-01-13
  • 2022-11-11
  • 2022-07-21
  • 2019-01-26
  • 2019-05-02
  • 2021-04-07
  • 2021-01-22
相关资源
最近更新 更多