Dart编写onTap箭头函数时提示Expected to find ')'报错咨询
错误产生原因
这个报错是Dart语法规则冲突导致的:Dart中匿名函数存在两种互斥的简写方式,当前代码把两种写法错误拼接在了一起,解析器无法识别。
两种合法的匿名函数写法规则如下:
- 块体匿名函数:格式为
() async { /* 执行逻辑 */ },大括号内可编写多行代码,需要手动写return返回值 - 箭头匿名函数:格式为
() async => 单条执行表达式,箭头后只能跟单行表达式,自动返回表达式执行结果,不需要搭配大括号
你写的onTap: () async {} => moveToHome(context),中,() async {}已经是一个完整闭合的块体匿名函数,后面多余的=>属于无主语法,解析器本来预期在大括号闭合后就匹配到参数列表的闭合符号,碰到非法的=>就抛出了Expected to find ')'的错误。
修复方法
根据你的业务场景二选一即可:
- 仅需要执行
moveToHome(context)单条逻辑时,直接使用箭头函数写法,删除多余的大括号:
onTap: () async => moveToHome(context),
- 后续需要在回调内补充其他逻辑(如延时跳转、加载提示、接口请求等)时,使用块体函数写法,把调用逻辑挪到大括号内,删除多余的
=>:
onTap: () async { // 可在此处补充其他业务逻辑 moveToHome(context); },
内容的提问来源于stack exchange,提问作者Sahil
相关产品推荐
相关产品推荐

