【问题标题】:Dart set default value for parameterDart 设置参数的默认值
【发布时间】:2019-10-22 05:06:37
【问题描述】:

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

所有这些样本都不正确

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      Gunhan's answer 解释了如何设置默认的BorderRadius

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-19
        • 2011-10-31
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多