繁体   English   中英

Dart 为参数设置默认值

[英]Dart set default value for parameter

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)
  });
}

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

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

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

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

  @override
  Widget build(BuildContext context) {
    return null;
  }
}

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

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

class Foo {
  Bar bar;

  Foo({Bar? bar}) : bar = bar ?? Bar();
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM