You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter调用API时出现String转Double类型转换错误,求解决方法

解决API解析时String转Double的类型转换错误

问题原因

控制台报错 type 'String' is not a subtype of type 'double' in type cast,核心原因是API返回的rate、lastprice、hacim字段实际为字符串类型,但你的模型类里直接用as double强制转换,导致类型不兼容。

修复方案

修改ResultClass的fromJson工厂方法,将字符串类型的数值转换为double,推荐用double.tryParse()处理,避免因格式问题导致崩溃:

修改后的完整模型代码

// To parse this JSON data do
//
//     final hisselist = hisselistFromJson(jsonString);

import 'dart:convert';

Hisselist hisselistFromJson(String str) => Hisselist.fromJson(json.decode(str));

String hisselistToJson(Hisselist data) => json.encode(data.toJson());

class Hisselist {
  Hisselist({
    required this.success,
    required this.result,
  });

  bool success;
  List<ResultClass> result;

  factory Hisselist.fromJson(Map<String, dynamic> json) => Hisselist(
        success: json["success"],
        result: List<dynamic>.from(json["result"])
            .map((i) => ResultClass.fromJson(i))
            .toList(),
      );

  Map<String, dynamic> toJson() => {
        "success": success,
        "result": result.map((item) => item.toJson()).toList(),
      };
}

class ResultClass {
  ResultClass({
    required this.rate,
    required this.lastprice,
    required this.lastpricestr,
    required this.hacim,
    required this.hacimstr,
    required this.text,
    required this.code,
  });

  double rate;
  double lastprice;
  String lastpricestr;
  double hacim;
  String hacimstr;
  String text;
  String code;

  factory ResultClass.fromJson(Map<String, dynamic> json) => ResultClass(
        // 将字符串转为double,解析失败时默认返回0.0
        rate: double.tryParse(json["rate"].toString()) ?? 0.0,
        lastprice: double.tryParse(json["lastprice"].toString()) ?? 0.0,
        lastpricestr: json["lastpricestr"] ?? "",
        hacim: double.tryParse(json["hacim"].toString()) ?? 0.0,
        hacimstr: json["hacimstr"] ?? "",
        text: json["text"] ?? "",
        code: json["code"] ?? "",
      );

  Map<String, dynamic> toJson() => {
        "rate": rate,
        "lastprice": lastprice,
        "lastpricestr": lastpricestr,
        "hacim": hacim,
        "hacimstr": hacimstr,
        "text": text,
        "code": code,
      };
}

额外优化建议

  1. 修复API调用代码中的语法错误:if(mounted);多了分号,改为:
if(mounted) {
  setState(() {
    counter = result.result.length;
    hisseResult = result;
  });
}

避免在Widget已销毁时执行setState引发异常。

  1. 优化ListView显示逻辑:当前subtitle和title重复显示code,可以改为展示更有意义的内容,比如:
title: Text(hisseResult?.result[index].code ?? ""),
subtitle: Text(hisseResult?.result[index].lastpricestr ?? ""),

内容的提问来源于stack exchange,提问作者Mıktad Tahir Durak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:27:45