Почему метод разбора, выбрасывающий тип 'int', не является подтипом типа 'String' с ошибкой? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть очень простой метод, который преобразует динамическую c переменную в 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
    };
}

Теперь, когда я попробуйте использовать метод для преобразования свойств из указанного выше класса из dynamici c в int:

_convertedNum(properties.popEst);

Я получаю тип 'int' не является подтипом типа 'String' ошибка. Я попытался изменить свойства с dynamici c на String, но та же ошибка.

Я также попытался сделать то же самое с json:

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

Также сгенерировал похожую ошибку.

Как мне преобразовать свойства в целые числа, пожалуйста?.

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Это потому, что parse, как говорится в документации, берет источник String и преобразует его в int, в то время как то, что вы делаете (из ошибки), передает int s parse,

решение:

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

    return intNumber;
  }
1 голос
/ 23 апреля 2020

Возможно, некоторые из ваших свойств уже целые. Поскольку int.parse() хочет String в качестве параметра, возможно, делает:

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

  return intNumber;
}

Может решить вашу проблему.

0 голосов
/ 23 апреля 2020

Данные, которые вы передаете, имеют тип integer. Вы можете попробовать проверить тип данных следующим образом:

if(number is int){ 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...