如何在Dart的getter中定义switch语句并解决语法报错问题
报错原因
- Dart的
=>箭头语法仅支持后跟单个返回值表达式,不能跟大括号包裹的语句块。你在箭头后直接写{会被Dart识别为Set/Map字面量的起始标记,而不是代码块的开始,内部的switch语句不符合集合字面量的语法规则,因此触发Expected to find '}'的语法错误。 - 普通函数可以正常运行,是因为你没有使用箭头语法,函数名后的
{会被正确解析为函数体的边界。
正确实现方案
方案1: getter使用标准代码块写法(兼容所有Dart版本)
直接去掉箭头语法,给getter加常规代码块即可,逻辑和你写的普通函数完全一致:
String get buttonText { switch (step) { case 1: return "Register >"; case 2: return "Confirmation >"; } throw "Invalid step"; }
方案2:使用箭头语法+Switch表达式(需Dart 3.0及以上版本)
如果你想保留箭头语法的简写形式,可以将语句式switch替换为Dart 3.0新增的表达式式switch,直接作为返回值放在箭头后:
String get buttonText => switch (step) { 1 => "Register >", 2 => "Confirmation >", _ => throw "Invalid step" };
内容的提问来源于stack exchange,提问作者FloatingRock
相关产品推荐
相关产品推荐

