飞镖设置参数的默认值

时间:2019-06-06 16:26:13

标签: flutter dart

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

所有这些样本都不正确

2 个答案:

答案 0 :(得分:3)

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

要设置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;
  }
}

答案 1 :(得分:1)

Gunhan's answer介绍了如何设置默认值BorderRadius

通常,如果没有可用的const构造函数,则可以求助于使用null的默认值(或其他一些合适的前哨值),然后在以后设置所需的值:

class Foo {
  Bar bar;

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

(请注意,与直接设置默认值相比,使用此方法显式传递null作为参数会有所不同。也就是说,使用此方法的Foo(bar: null)将初始化{{1} }设为bar,而使用正常的默认值会将Bar()初始化为bar。但是,在某些情况下,这种方法的行为可能更可取。)