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, }; }
额外优化建议
- 修复API调用代码中的语法错误:
if(mounted);多了分号,改为:
if(mounted) { setState(() { counter = result.result.length; hisseResult = result; }); }
避免在Widget已销毁时执行setState引发异常。
- 优化ListView显示逻辑:当前subtitle和title重复显示
code,可以改为展示更有意义的内容,比如:
title: Text(hisseResult?.result[index].code ?? ""), subtitle: Text(hisseResult?.result[index].lastpricestr ?? ""),
内容的提问来源于stack exchange,提问作者Mıktad Tahir Durak
相关产品推荐
相关产品推荐

