Flutter 无法将参数类型 'String' 分配给参数类型 'Map<String, dynamic>'

时间:2021-04-11 16:01:07

标签: api flutter fetch

当我想从 PONS API 获取数据时遇到了问题。

import 'package:eng_it_translator/model/model.dart';
import 'package:http/http.dart';
import 'dart:convert';

import 'package:http/http.dart' as http;

class Network {
  Future<Vocabulary> fetchData({String keyword}) async {
    var headers = {
      'X-Secret':
          'XXXXXXXXXXXXX',
    };

    var params = {
      'q': 'house',
      'l': 'deen',
    };
    var query = params.entries.map((p) => '${p.key}=${p.value}').join('&');
    var url = Uri.parse("https://api.pons.com/v1/dictionary?$query");

    var res = await http.get(url, headers: headers);
    if (res.statusCode == 200) {
      var data = json.decode(res.body);
      var realdata =
          List<Vocabulary>.from(data).map((x) => Vocabulary.fromJson(x));
      print(realdata);
    } else {
      throw Exception('http.get error: statusCode= ${res.statusCode}');
    }
  }
}

不能将参数类型“Vocabulary”分配给参数类型“Map”。

DATA 的主体是 Map 结构,但我无法将其转换为 List。

class Vocabulary {
  String lang;
  List<Hits> hits;

  Vocabulary({this.lang, this.hits});

  Vocabulary.fromJson(Map<String, dynamic> json) {
    lang = json['lang'];
    if (json['hits'] != null) {
      hits = new List<Hits>();
      json['hits'].forEach((v) {
        hits.add(new Hits.fromJson(v));
      });
    }
  }

2 个答案:

答案 0 :(得分:0)

我认为你必须将 json 转换为 Map 试试这个

       hits: json['hits'] != null
      ? json['hits'].map<Hits>((v) => new Hits.fromJson(v)).toList()

答案 1 :(得分:0)

您可以通过添加 toList() 将您的 Vocabulary 数据转换为 List

List.from(data)
              .map((x) => Vocabulary.fromJson(x))
              .toList());