Dart 中是否可以只需要两个参数之一?

leb*_*755 8 constructor dart flutter

我知道我可以使用@required如下所示的一个参数:

class Foo{
  String firstParam;
  String secondParam;
  Foo({@required this.firstParam, this.secondParam});
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何只需要两个参数之一而不需要两个参数。我有一些看起来像我想要使用的东西assert

class Foo{
  String firstParam;
  String secondParam;

  Foo({this.firstParam, this.secondParam}): assert(this.firstParam != null || this.secondParam!= null);
}
Run Code Online (Sandbox Code Playgroud)

但它不会在 VS Code 中警告我,并且asserts不会在发布模式下使用。

Dart 有什么方法可以做到这一点吗?

voi*_*oid 7

使用它并为您的断言提供一条消息:

class Foo {
  String firstParam;
  String secondParam;

  Foo({this.firstParam, this.secondParam})
      : assert(
          (firstParam != null || secondParam != null),
          'One of the parameters must be provided',
        );
}
Run Code Online (Sandbox Code Playgroud)

如果未提供任何参数,则会发出警告:

在此输入图像描述

  • 它不完全是我想要的,因为它没有在发布模式下使用(我已经使用断言)。如果未提供其中一个参数,我也希望无法编译我的应用程序。在这里,我可以编译,但如果我没有提供一个参数,它会抛出异常。 (2认同)

And*_*say 0

我认为这是不可能的,尽管您可以将两个参数设置为必需,并在需要时显式设置为 null