带有命名和可选参数的颤振函数

时间:2021-04-22 11:41:23

标签: function flutter dart parameters optional-parameters

我有一个函数,它应该有三个 required 参数,最好是 named 参数。最后一个(“finished”)应该是optional。我是这样试的:

static void showOverlay(BuildContext context, String text, bool successfull,
  [VoidCallback? finished]) {}

但 Flutter 正在抱怨:

<块引用>

避免位置布尔参数

奇怪的是,它只是抱怨 bool successfull。我在这里做错了什么,我该如何解决?

3 个答案:

答案 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);