Flutter 如何解决「可选参数默认值必须为常量」的报错问题
错误原因
Dart语法规定,可选参数的默认值必须是编译时常量。你直接在参数声明处写this.servingList = []时:
- 不加
const修饰的[]不是编译时常量,因此触发你遇到的编译错误 - 如果你改成
const []作为默认值,虽然能解决编译错误,但const修饰的列表是不可变的,后续你往列表中添加元素时会抛出运行时异常,不符合你的需求
解决方法
将servingList参数声明为可空类型,在类的初始化列表中完成默认值赋值即可,修改后的代码如下:
class Restaurant{ final String id; final String name; List<Serving> servingList; Restaurant({ required this.id, required this.name, List<Serving>? servingList, // 声明为可空参数,不设置默认值 }) : servingList = servingList ?? []; // 初始化列表中判空,为空时赋值空的可变列表 }
这种写法下,如果实例化时传入了servingList就使用传入的值,没有传入的话会自动初始化一个空的可变列表,完全支持后续往列表中添加元素的操作。
内容的提问来源于stack exchange,提问作者Dalon
相关产品推荐
相关产品推荐

