此问题已经回答,如果您认为自己有相同的错误,请继续阅读,答案由用户给出:Tariqul Islam
由于几天前更新频繁,我的代码显示以下错误:
_TypeError(类型'String'不是类型'int'的子类型)
显然,在此更新之前,即使从“ int”更改为“ String”后,应用程序也可以正常运行,但我却得到了相同的错误,但反之:
_TypeError(类型“ int”不是类型“ String”的子类型)
尽管我更改了值,但对我来说仍然出现相同的错误,也很清楚我正在使用的RestApi没有任何更改。
进入“ Chip”时出现错误,将其更改为“ String”后,在“ Number”中出现了相同的错误,并且在更改了这两个错误之后,出现了同样的错误,但是如上所述。 / p>
这里是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
答案 0 :(得分:0)
只需int chip
至String chip
,以及int numero
至String 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,
});
答案 1 :(得分:0)
在Json中,您将Chip和Numero作为String接收,但是在模型文件中,您将其声明为整数。在模型文件中将数据类型更改为String。
String numero;
String chip;
答案 2 :(得分:0)
根据您提供的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,
};
}
答案 3 :(得分:0)
如果未明确指定变量的类型,则该变量的类型为动态。动态关键字也可以显式用作类型注释。
您可以使用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,
});
答案 4 :(得分:0)
我喜欢这个问题,在这种情况下,我确实定义了从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);
}