Dart 为参数设置默认值

Dol*_*rma 6 dart flutter

Flutter框架中,我试图将参数的默认值设置为borderRadius,在此示例中我如何实现它?我得到的Default values of an optional parameter must be constant错误,当我尝试设置,例如:

class SimpleRoundButton extends StatelessWidget {
  final BorderRadius borderRadius;
  SimpleRoundButton({
  }):this.borderRadius = BorderRadius.circular(30.0);
}


class SimpleRoundButton extends StatelessWidget {
  final BorderRadius borderRadius= BorderRadius.circular(30.0);
  SimpleRoundButton({
    this.borderRadius,
  });
}


class SimpleRoundButton extends StatelessWidget {
  final BorderRadius borderRadius;
  SimpleRoundButton({
    this.borderRadius=  BorderRadius.circular(30.0)
  });
}
Run Code Online (Sandbox Code Playgroud)

所有这些样本都是不正确的

Gun*_*han 10

BorderRadius.circular() 不是 const 函数,因此您不能将其用作默认值。

为了能够设置 const 圆形边框,您可以使用BorderRadius.all如下所示的 const 函数:

class SimpleRoundButton extends StatelessWidget {
  final BorderRadius borderRadius;
  SimpleRoundButton({
    this.borderRadius: const BorderRadius.all(Radius.circular(30.0))
  });

  @override
  Widget build(BuildContext context) {
    return null;
  }
}
Run Code Online (Sandbox Code Playgroud)


jam*_*lin 10

Gunhan 的回答解释了如何设置默认BorderRadius.

通常,如果没有const可用的构造函数,您可以改用null默认值(或其他一些适当的标记值),然后稍后设置所需的值:

class Foo {
  Bar bar;

  Foo({Bar? bar}) : bar = bar ?? Bar();
}
Run Code Online (Sandbox Code Playgroud)

请注意,null与直接设置默认值相比,使用此方法显式传递作为参数会有所不同。也就是说,Foo(bar: null)使用这种方法会将成员变量初始化barBar(),而使用正常的默认值,它将被初始化为null并要求该成员可以为空。(但是,在某些情况下,这种方法的行为可能更受欢迎。)