繁体   English   中英

(已解决)('String' 类型不是 'int' 类型的子类型)- Flutter

[英](Resolved)(type 'String' is not a subtype of type 'int') - Flutter

这个问题已经有人回答了,如果你认为你有同样的错误,请继续阅读,用户给出了答案: Tariqul Islam

因为几天前有一个颤振更新我的代码显示以下错误:

_TypeError(“String”类型不是“int”类型的子类型)

显然,该应用程序在此更新之前运行良好,即使在从“int”更改为“String”之后,我也遇到了相同的错误,但反过来:

_TypeError(“int”类型不是“String”类型的子类型)

尽管我更改了值,但仍然出现相同的错误,而且很明显我正在使用的 RestApi 没有任何更改。

当我进入“芯片”时出现错误,将其更改为字符串后,我在“数字”中出现相同的错误,并且在我更改两个相同的错误后出现相同的错误,但反之亦然,正如我上面指出的

这里的 Json 文件模型:

          class EventoModel {
        String id;
        String nombreEvento;
        List<Participantes> participantes;

        EventoModel({
          this.id,
          this.nombreEvento,
          this.participantes
        });

        factory EventoModel.fromJson(Map<String, dynamic> parsedJson){
          var list = parsedJson['participantes'] as List;
          //print(list.runtimeType);
          List<Participantes> participantesList = list.map((i) => Participantes.fromJson(i)).toList();
          return EventoModel(
            id            : parsedJson ['id'],
            nombreEvento  : parsedJson ['nombreEvento'],
            participantes : participantesList
          );
        }
      }

      class Participantes {
      String uniqueId;
      String apellido;
      int chip;
      String nombre;
      int numero;
      String place;
      String tiempo;

      Participantes({
        this.apellido,
        this.chip,
        this.nombre,
        this.numero,
        this.place,
        this.tiempo,
      });

      factory Participantes.fromJson(Map<String, dynamic> parsedJson) {
        //print(list.runtimeType);
        return Participantes(
          apellido  : parsedJson['Apellido'],
          chip      : parsedJson['Chip'],
          nombre    : parsedJson['Nombre'],
          numero    : parsedJson['Numero'],
          place     : parsedJson['Place'],
          tiempo    : parsedJson['Tiempo'],
        );
      }

      Map<String, dynamic> toJson() {
        return {
          'Apellido'  : apellido,
          'Chip'      : chip,
          'Nombre'    : nombre,
          'Numero'    : numero,
          'Place'     : place,
          'Tiempo'    : tiempo,
        };
      }
    }

这是 Json 文件示例:

              {
              "nombreEvento" : "Clasico El Colombiano 2020",
              "participantes" : [ {
                "Apellido" : "MARTINEZ GUTIERREZ",
                "Chip" : "739",
                "Nombre" : "JOSE",
                "Numero" : "139",
                "Place" : "1.",
                "Tiempo" : "00:30:12,91"
                }, {
                "Apellido" : "SUAREZ MORERA",
                "Chip" : "707",
                "Nombre" : "DANIEL",
                "Numero" : "107",
                "Place" : "2.",
                "Tiempo" : "02:00:17,54"
                }, {
                "Apellido" : "RODRIGUEZ VARGAS",
                "Chip" : "1686",
                "Nombre" : "JOSE LUIS",
                "Numero" : "274",
                "Place" : "3.",
                "Tiempo" : "02:01:09,09"
                }
              ]
            }

有人可以帮我吗? : C

如果未明确指定变量的类型,则该变量的类型是动态的。 dynamic 关键字也可以显式地用作类型注释。

您可以使用 dynamic 而不是 int ,它将解决问题。

class Participantes {
  String uniqueId;
  String apellido;
  dynamic chip;
  String nombre;
  dynamic numero;
  String place;
  String tiempo;

  Participantes({
    this.apellido,
    this.chip,
    this.nombre,
    this.numero,
    this.place,
    this.tiempo,
  });

我喜欢这个问题,在这种情况下,我确实将类型从 int 定义为 dynamic 然后它解决了。 例如:在 firebase 端,我定义了数字类型,并使用动态类型读取它。 如果你在你的代码中做 int 它会警告你“类型'int'不是'String'类型的子类型”但如果你定义动态它会解决。 代码示例在下面。

//class Survey
class Survey {
  String name;
  dynamic vote;  // before it was int type and I have changed
  DocumentReference reference;
  
  Survey.fromMap(Map<String, dynamic> map, {this.reference})

      //datanın var olup olmadığını kontrol et eğer varsa kullan
      : assert(map["name"] != null),
        assert(map["vote"] != null),
        name = map["name"],
        vote = map["vote"];
        
  Anket.fromSnapshot(DocumentSnapshot snapshot)
      : this.fromMap(snapshot.data(), reference: snapshot.reference);
      
}

只需将int chipString chip ,将int numeroString numero因为在您的JSON数据中是String

 class Participantes {
      String uniqueId;
      String apellido;
      String chip;
      String nombre;
      String numero;
      String place;
      String tiempo;

      Participantes({
        this.apellido,
        this.chip,
        this.nombre,
        this.numero,
        this.place,
        this.tiempo,
      });

在 Json 中,您将 Chip 和 Numero 作为字符串接收,但在您的模型文件中,您将其声明为整数。 在模型文件中将数据类型更改为字符串。

String numero;
String chip;

根据您提供的 JSON,我在下面创建了一个模型类:查看并告诉我:

// To parse this JSON data, do
//
//     final eventoModel = eventoModelFromJson(jsonString);

import 'dart:convert';

EventoModel eventoModelFromJson(String str) => EventoModel.fromJson(json.decode(str));

String eventoModelToJson(EventoModel data) => json.encode(data.toJson());

class EventoModel {
    String nombreEvento;
    List<Participante> participantes;

    EventoModel({
        this.nombreEvento,
        this.participantes,
    });

    factory EventoModel.fromJson(Map<String, dynamic> json) => EventoModel(
        nombreEvento: json["nombreEvento"],
        participantes: List<Participante>.from(json["participantes"].map((x) => Participante.fromJson(x))),
    );

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

class Participante {
    String apellido;
    String chip;
    String nombre;
    String numero;
    String place;
    String tiempo;

    Participante({
        this.apellido,
        this.chip,
        this.nombre,
        this.numero,
        this.place,
        this.tiempo,
    });

    factory Participante.fromJson(Map<String, dynamic> json) => Participante(
        apellido: json["Apellido"],
        chip: json["Chip"],
        nombre: json["Nombre"],
        numero: json["Numero"],
        place: json["Place"],
        tiempo: json["Tiempo"],
    );

    Map<String, dynamic> toJson() => {
        "Apellido": apellido,
        "Chip": chip,
        "Nombre": nombre,
        "Numero": numero,
        "Place": place,
        "Tiempo": tiempo,
    };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM