我想设置一个包含 BorderRadius.circular 的值作为构造函数参数的默认值

森口万*_*万太郎 3 dart flutter

我已经为 ElevatedButton 定义了一个自定义小部件,我想让 shape 字段成为可选的,如下所示,并在没有传递值时使用初始值,但是当我按照上面的方式编写时,会出现以下错误。..

\n
class GradientElevatedButton extends StatelessWidget {\n  GradientElevatedButton({\n    Key? key,\n    required this.onPressed,\n    required this.child,\n    required this.colors,\n    this.shape = RoundedRectangleBorder(\n      borderRadius: BorderRadius.circular(30),//\xe2\x86\x90here\n    ),\n  }) : super(key: key);\n\n  final Widget child;\n  final void Function() onPressed;\n  final List<Color> colors;\n  final OutlinedBorder shape;\n
Run Code Online (Sandbox Code Playgroud)\n
//error\nThe default value of an optional parameter must be constant.\n
Run Code Online (Sandbox Code Playgroud)\n

也许这意味着 BorderRadius.circular 构造函数不是 const,

\n

如果想使用下面的OutlinedBorder作为默认值应该怎么写?\nRoundedRectangleBorder(\nborderRadius: BorderRadius.circular(30),\n)

\n

Val*_*nal 5

BorderRadius.circular不是const构造函数,因此不能将其用作const构造函数的默认值。

\n

但是,如果你看一下实现:

\n
/// Creates a border radius where all radii are [Radius.circular(radius)].\nBorderRadius.circular(double radius) : this.all(\n  Radius.circular(radius),\n);\n
Run Code Online (Sandbox Code Playgroud)\n

它使用BorderRadius.allandRadius.circular并且它们都是const构造函数。

\n

所以你可以更换

\n
BorderRadius.circular(shape)\n
Run Code Online (Sandbox Code Playgroud)\n

\n
BorderRadius.all(Radius.circular(30))\n
Run Code Online (Sandbox Code Playgroud)\n

这是您更新的代码示例:

\n
class GradientElevatedButton extends StatelessWidget {\n  GradientElevatedButton({\n    Key? key,\n    required this.onPressed,\n    required this.child,\n    required this.colors,\n    this.shape = const RoundedRectangleBorder( // <- Don\'t forget the const keyword\n      borderRadius: BorderRadius.all(Radius.circular(30)),//\xe2\x86\x90here\n    ),\n  }) : super(key: key);\n\n  final Widget child;\n  final void Function() onPressed;\n  final List<Color> colors;\n  final OutlinedBorder shape;\n
Run Code Online (Sandbox Code Playgroud)\n