我有一个函数,它应该有三个 required
参数,最好是 named
参数。最后一个(“finished
”)应该是optional
。我是这样试的:
static void showOverlay(BuildContext context, String text, bool successfull,
[VoidCallback? finished]) {}
但 Flutter 正在抱怨:
<块引用>避免位置布尔参数
奇怪的是,它只是抱怨 bool successfull
。我在这里做错了什么,我该如何解决?
答案 0 :(得分:1)
命名参数默认是可选的。因此,在您的情况下,它将是:
static void showOverlay({BuildContext context, String text, bool successfull, VoidCallback? finished}) {}
注意构造函数中的 {},这使您的参数命名和可选。通过在声明前使用 @required,您可以区分必需和非必需。
答案 1 :(得分:1)
Named parameters are optional unless they’re specifically marked as required。
下面,您的所有四个参数都已命名。三个是 required
而其中一个是可选的。
static void showOverlay({required BuildContext context, required String text,
required bool successfull, VoidCallback? finished}) {}
答案 2 :(得分:1)
你可以像这样使用位置参数
void showOverlay(BuildContext context, String text, bool successful, [VoidCallback finished]) {}
或者像这样使用命名参数
void showOverlay({@required BuildContext context, @required String text, @required bool successful, VoidCallback finished}) {}
并且 dart 抱怨,因为命名参数是 dart 文档中提到的最佳实践
位置布尔参数是一种不好的做法,因为它们非常模糊。使用命名布尔参数更具可读性,因为它本质上描述了布尔值代表什么。
不好:
Task(true);
Task(false);
ListBox(false, true, true);
Button(false);
好:
Task.oneShot();
Task.repeating();
ListBox(scroll: true, showScrollbars: true);
Button(ButtonState.enabled);