【问题标题】:Flutter error: the argument type 'dynamic' can't be assigned to the parameter type 'Iterable<dynamic>'Flutter 错误:参数类型“动态”不能分配给参数类型“Iterable<dynamic>”
【发布时间】:2021-07-05 06:40:24
【问题描述】:

请提供帮助。 我正在尝试使用 JSON to Dart 工具创建模型https://app.quicktype.io/

目的是从 JSON API 中检索所有公司(及其属性)的列表。

我收到以下错误:

  • 参数类型“动态”不能分配给参数类型 Map
  • 参数类型“动态”不能分配给参数类型 Iterable
  • 参数类型“动态”不能分配给参数类型 Int

请参考下图。 the argument type 'dynamic' can't be assigned to the parameter type...

谢谢。

【问题讨论】:

  • 你能发布json响应吗?
  • { "companies": [ { "id": 19, "name": "Equity" }, { "id": 1, "name": "King Pastry" }, { "id ": 5, "名称": "Sonas" } ] }

标签: json flutter dart rest


【解决方案1】:

我已经测试过这个类,它可以正常工作

import 'dart:convert';

CompanyModel companyModelFromJson(String str) => CompanyModel.fromJson(json.decode(str));

String companyModelToJson(CompanyModel data) => json.encode(data.toJson());

class CompanyModel {
    CompanyModel({
        this.companies,
    });

    List<Company> companies;

    factory CompanyModel.fromJson(Map<String, dynamic> json) => CompanyModel(
        companies: List<Company>.from(json["companies"].map((x) => Company.fromJson(x))),
    );

    Map<String, dynamic> toJson() => {
        "companies": List<dynamic>.from(companies.map((x) => x.toJson())),
    };
}

class Company {
    Company({
        this.id,
        this.name,
    });

    int id;
    String name;

    factory Company.fromJson(Map<String, dynamic> json) => Company(
        id: json["id"],
        name: json["name"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "name": name,
    };
}

作为替代方案,您可以使用来自JsonToDart的代码

class CompanyModel {
  List<Companies> companies;

  CompanyModel({this.companies});

  CompanyModel.fromJson(Map<String, dynamic> json) {
    if (json['companies'] != null) {
      companies = new List<Companies>();
      json['companies'].forEach((v) {
        companies.add(new Companies.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.companies != null) {
      data['companies'] = this.companies.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Companies {
  int id;
  String name;

  Companies({this.id, this.name});

  Companies.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['name'] = this.name;
    return data;
  }
}

【讨论】:

  • 谢谢。不过应该提到,我也测试了 JsonToDart。您正在运行哪个颤振版本?我想知道这是否与我的版本有关。我正在使用:Flutter 2.0.3 Dart 2.12.2
猜你喜欢
  • 2021-11-23
  • 2021-11-13
  • 2021-12-24
  • 2021-06-26
  • 2021-09-21
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
相关资源
最近更新 更多