Flutter/Dart调用calculCredit函数出现Closure类型报错如何解决?
报错原因
- 字符串插值语法不符合Dart规范:当插值内容是函数调用、运算表达式等非单个变量的内容时,必须用
${}包裹。你直接书写$calculCredit(...)时,Dart只会将$calculCredit识别为插值内容,最终输出的是函数本身的toString()结果(也就是你看到的Closure提示),后面的参数列表会被当成普通字符串处理,函数根本没有被执行。 - 方法内部属性调用错误:你类中定义的
salaire、valeurAcq等四个参数都是String类型,本身就是文本值,不存在.text属性,只有TextEditingController实例才带有.text属性,直接调用.text会触发运行时异常。
修复方案
1. 修正calculCredit方法逻辑
给参数补充明确的类型声明,移除所有参数后的.text调用,直接对字符串做数值转换:
double calculCredit(String salaire, String valeurAcq, String valeurApport, String moisRembours) { double res = (double.parse(salaire) - double.parse(valeurApport) / double.parse(moisRembours)); return res; }
如果你不想每次调用都传参,也可以直接在方法内部访问类的成员变量,简化写法:
// 无参版本,直接用类的属性 double calculCredit() { double res = (double.parse(salaire) - double.parse(valeurApport) / double.parse(moisRembours)); return res; }
2. 修正Text组件中的字符串插值
用${}包裹整个函数调用表达式:
Text( "Le montant à rembourser DT/Mois : ${calculCredit(salaire,valeurAcq,valeurApport,moisRembours)} ", textAlign: TextAlign.center, style: TextStyle( fontSize: 15, color: Colors.grey[700], ), )
如果用了上面的无参版本,插值部分改成${calculCredit()}即可。
可选优化
建议用double.tryParse替代double.parse,提前处理字符串不符合数值格式的异常,避免运行时崩溃。
内容的提问来源于stack exchange,提问作者LearningFlutterDev
相关产品推荐
相关产品推荐

