为什么解析方法抛出类型'int'的错误不是类型'String'的子类型?

时间:2020-04-23 12:39:03

标签: json flutter dart

我有一个非常简单的方法,可以像这样将动态变量转换为int:

  int _convertedNum(dynamic number){
    int intNumber = int.parse(number);

    return intNumber;
  }

我有这个模型课:

class Properties {

    dynamic popEst;


    dynamic confirmed;

    Properties({

        this.popEst,

        this.confirmed
    });

    factory Properties.fromJson(String str) => Properties.fromMap(json.decode(str));

    String toJson() => json.encode(toMap());

    factory Properties.fromMap(Map<String, dynamic> json) => Properties(

        popEst: json["pop_est"],

        confirmed: json["confirmed"]
    );

    Map<String, dynamic> toMap() => {

        "pop_est": popEst,

        "confirmed": confirmed
    };
}

现在,当我尝试使用该方法将上述类的属性从dynamic转换为int时:

_convertedNum(properties.popEst);

我得到类型'int'不是'String'类型的子类型错误。我尝试将属性从动态更改为字符串,仍然出现错误。

我也尝试对json进行此操作:

confirmed: json["confirmed"].toInt();

也抛出类似的错误。

如何将属性转换为整数?

3 个答案:

答案 0 :(得分:1)

这是因为parse(如文档所述)采用String的来源并将其转换为int,而您所做的(由于错误)却毫无意义intparse

解决方案:

int func(dynmaic number){
    int intNumber = int.parse(number.toString());

    return intNumber;
  }

答案 1 :(得分:1)

也许您的某些属性已经是整数。由于int.parse()要使用String作为参数,因此可以这样做:

int _convertedNum(dynamic number){
  int intNumber = int.parse(number.toString());

  return intNumber;
}

可以解决您的问题。

答案 2 :(得分:0)

您要传递的数据是整数类型。您可以尝试检查数据类型,如下所示:

if(number is int){ 

}