Dart定义带可选参数的构造器报错该如何解决?
问题原因
- 错误2的核心是语法规则冲突:Dart 中
{}包裹的是命名参数,[]包裹的是位置可选参数,两类参数不能混合在同一个参数列表段里,你当前已经用大括号声明了命名参数,新增的可选参数也要作为命名可选参数放在大括号内,不能单独加方括号。 - 错误1是变量可空性不匹配:你的
color字段是不可空的Color类型,如果作为可选参数没有传入赋值,就会出现未初始化的问题,需要调整可空性或者给定非空默认值。
正确写法
空安全版本(Flutter 2.0+,Dart 2.12+ 适用)
如果你允许color为null,直接把字段声明为可空类型即可:
class Artists_Showroom extends StatefulWidget { const Artists_Showroom({ Key? key, @required this.lista, @required this.database, @required this.artistaCorrente, this.color, // 命名可选参数,默认值为null }) : super(key: key); final List<Artista> lista; final Artista artistaCorrente; final Database database; final Color? color; // 声明为可空类型
如果你不想用可空类型,可以给个非空默认值,比如:
this.color = Colors.transparent, // 对应字段还是 final Color color; 不用改可空
非空安全旧版本适用
class Artists_Showroom extends StatefulWidget { Artists_Showroom({ Key key, @required this.lista, @required this.database, @required this.artistaCorrente, this.color = null, }) : super(key: key); final List<Artista> lista; final Artista artistaCorrente; final Database database; final Color color;
使用的时候直接传入命名参数即可:Artists_Showroom(lista: xxx, database: xxx, artistaCorrente: xxx, color: xxx),不传color的话就会使用默认值。
内容的提问来源于stack exchange,提问作者Finley Adams
相关产品推荐
相关产品推荐

