Flutter运行报Closure call with mismatched arguments错误如何解决
错误根因
NoSuchMethodError: Closure call with mismatched arguments: function 'LoginScreen.build.<anonymous closure>' 错误的本质是闭包定义的入参要求和实际调用时的传参不匹配,你当前的场景是:代码中存在一个需要接收1个String类型参数的闭包,调用时没有传入任何参数,且该闭包是在LoginScreen的build方法内定义的匿名方法。
优先级排查方向
- 先核对
LoginScreenbuild方法内所有绑定到组件的回调逻辑:优先看登录按钮点击回调、文本输入框的onChanged/onSubmitted回调,如果你在公共组件中定义的回调类型是ValueChanged<String>(即要求传入String参数的闭包),但绑定时写的是onCallback: () { 逻辑代码 }没有预留入参,就会触发该错误。 - 再查
components.dart中自定义公共组件的回调字段定义:确认哪些组件的回调要求传入String参数,再对应核对LoginScreen中调用这些组件时的回调写法是否匹配。 main.dart通常只做路由注册和全局初始化,除非登录逻辑是从全局透传进入LoginScreen,否则不需要优先排查。
快速复现定位方法
你可以临时给
LoginScreenbuild内所有绑定到组件的匿名回调都增加可选的String占位参数,比如把onPressed: () { ... }改为onPressed: ([String? temp]) { ... },运行后如果错误消失,再逐个移除占位参数,定位到触发错误的具体闭包即可。
内容的提问来源于stack exchange,提问作者Diaa Nassar
相关产品推荐
相关产品推荐

