0

此信息可能对那些正在为 Web 开发并需要为 Android 设备进行部署的人有用。

通过处理double来自 json 模型的数据类型,我在真正的 Android 手机(不是任何模拟器)上运行的颤振应用程序中遇到了以下错误:

类型“_Smi”不是类型“double”的子类型

网页版没有出现这个错误,我没有尝试IOS(因为我没有任何IOS设备)。另外,我没有在任何模拟器上进行测试。

这是我的模型:

class ModelExample {
  int id;
  String name;
  double percentRank;
  ModelExample({
    this.id,
    this.name,
    this.percentRank,
  });

  factory ModelExample.fromJson(Map<String, dynamic> json) {
    return ModelExample(
      id: json['id'] as int,
      name: json['api_name'] as String,
      percentRank: json['api_percent_rank'] as double,
    );
  }

  Map<String, dynamic> toJson() => {
        'id': id.toString(),
        'api_name': name,
        'api_percent_rank': percentRank.toString(),
      };

}

我的环境是:

  • Flutter(Channel stable,2.0.5,在 Microsoft Windows [版本 10.0.19042.928],语言环境 en-US)
  • 飞镖版本 2.12.3
  • Android 工具链 - 为 Android 设备开发(Android SDK 版本 30.0.3)
  • Java版OpenJDK运行环境(build 1.8.0_242-release-1644-b01)
  • Android Studio(版本 4.1.0)

我怎样才能摆脱这个错误?

4

1 回答 1

0

回答:

解决此问题的一种方法如下:

通过更改您的模型fromJson方法(摘录):

factory ModelExample.fromJson(Map<String, dynamic> json) {
    
      ...
    
        percentRank: json['api_percent_rank'] as double,
    
      ...
    
    }

至:

factory ModelExample.fromJson(Map<String, dynamic> json) {

  ...

    percentRank: double.parse(json['api_percent_rank'].toString()),

  ...

}

更改该行后,该错误将消失。

要更好地了解,请查看:https ://api.flutter.dev/flutter/dart-core/double/parse.html

于 2021-05-06T20:17:48.517 回答