我已经为 ElevatedButton 定义了一个自定义小部件,我想让 shape 字段成为可选的,如下所示,并在没有传递值时使用初始值,但是当我按照上面的方式编写时,会出现以下错误。..
\nclass 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;\nRun Code Online (Sandbox Code Playgroud)\n//error\nThe default value of an optional parameter must be constant.\nRun Code Online (Sandbox Code Playgroud)\n也许这意味着 BorderRadius.circular 构造函数不是 const,
\n如果想使用下面的OutlinedBorder作为默认值应该怎么写?\nRoundedRectangleBorder(\nborderRadius: BorderRadius.circular(30),\n)
\nBorderRadius.circular不是const构造函数,因此不能将其用作const构造函数的默认值。
但是,如果你看一下实现:
\n/// Creates a border radius where all radii are [Radius.circular(radius)].\nBorderRadius.circular(double radius) : this.all(\n Radius.circular(radius),\n);\nRun Code Online (Sandbox Code Playgroud)\n它使用BorderRadius.allandRadius.circular并且它们都是const构造函数。
所以你可以更换
\nBorderRadius.circular(shape)\nRun Code Online (Sandbox Code Playgroud)\n和
\nBorderRadius.all(Radius.circular(30))\nRun Code Online (Sandbox Code Playgroud)\n这是您更新的代码示例:
\nclass 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;\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |