Flutter开发BMI计算器传参报错:构造函数参数不匹配如何解决
问题原因
你遇到的Found this candidate, but the arguments don't match报错是Flutter编译时识别到你调用BmiResultScreen构造函数传入的参数,和该类定义的构造函数参数不匹配导致的,结合你提供的代码,最可能的触发原因有3个:
- 导入
BmiResultScreen的文件路径大小写和实际文件不匹配,在macOS/Linux等大小写敏感的系统上会导致编译器识别到旧的类定义 - Flutter编译缓存未更新,修改构造函数后热重载没有同步生效
- 隐式类型转换异常,部分Flutter版本对
round()返回的int类型识别存在兼容问题
可行解决方案
- 修正导入路径
确保BmiScreen文件头部的导入语句和实际BmiResultScreen的文件名完全一致,比如文件名是bmi_result_screen.dart就保持现有导入,如果文件名是BmiResultScreen.dart就将导入改为import 'BmiResultScreen.dart'; - 清除缓存重新运行
在项目根目录执行以下命令清理旧缓存:
flutter clean && flutter pub get
执行完成后重新运行项目即可。
3. 显式声明参数类型
将跳转页的传参代码添加显式类型转换,避免隐式转换报错:
Navigator.push( context, MaterialPageRoute( builder: (context) => BmiResultScreen( isMale: isMale, age: age, result: result.round() as int, ), ) );
额外优化点
BmiResultScreen中result已经是int类型,不需要再调用round()方法,可以直接写Result: $result减少冗余代码。
内容的提问来源于stack exchange,提问作者Diaa Nassar
相关产品推荐
相关产品推荐

