',api,flutter,fetch"/>

首页 > 解决方案 > Flutter 参数类型'String'不能赋值给参数类型'Map'

问题描述

当我想从 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}');
    }
  }
}

不能将参数类型“词汇”分配给参数类型“Map<String, dynamic>”。

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));
      });
    }
  }

标签: apiflutterfetch

解决方案


您可以通过添加 toList() 将您的词汇数据转换为列表

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

推荐阅读