Class Dart确保类中的可选布尔值不为空

Class Dart确保类中的可选布尔值不为空,class,flutter,dart,null,Class,Flutter,Dart,Null,由于它是一个可选值,有时会为null,因此如何避免它抛出错误?这是唯一的办法吗 class QText extends StatelessWidget { QText(this.text, this.size, [this.bold]); final String text; final double size; bool bold; @override Widget build(BuildContext context) { bold = (bold ==

由于它是一个可选值,有时会为null,因此如何避免它抛出错误?这是唯一的办法吗

class QText extends StatelessWidget {
  QText(this.text, this.size, [this.bold]);

  final String text;
  final double size;
  bool bold;

  @override
  Widget build(BuildContext context) {
    bold = (bold == null) ? false : bold;
    return Whatever..
  }
}
我很想这样做,但当然不行:

class QText extends StatelessWidget {
  QText(this.text, this.size, [this.bold]);

  final String text;
  final double size;
  final bool bold ?? false;

  @override
  Widget build(BuildContext context) {
    return Whatever..
  }
}

您需要为构造函数内的变量定义默认值:

如下图所示:

QText(this.text, this.size, [this.bold = false]): assert(bold != null,"bold cannot be null.");
若在粗体变量中未传递任何内容,则默认值为false

编辑

您可以使用断言来防止用户传递null,如果断言失败,您还可以打印消息

assert(bold != null,"bold cannot be null.")

您需要为构造函数内的变量定义默认值:

如下图所示:

QText(this.text, this.size, [this.bold = false]): assert(bold != null,"bold cannot be null.");
若在粗体变量中未传递任何内容,则默认值为false

编辑

您可以使用断言来防止用户传递null,如果断言失败,您还可以打印消息

assert(bold != null,"bold cannot be null.")

由于字段是最终字段,请尝试在构造函数初始化期间传递默认值

还要添加一个assert语句,以确保它从未初始化为null

例如:

class QText extends StatelessWidget {
  QText(this.text, this.size, [this.bold = false]) : assert(bold != null);

  final String text;
  final double size;
  final bool bold;

  @override
  Widget build(BuildContext context) {}
}

希望有帮助

由于字段是最终字段,请在构造函数初始化期间尝试传递默认值

还要添加一个assert语句,以确保它从未初始化为null

例如:

class QText extends StatelessWidget {
  QText(this.text, this.size, [this.bold = false]) : assert(bold != null);

  final String text;
  final double size;
  final bool bold;

  @override
  Widget build(BuildContext context) {}
}

希望有帮助

目前,Dart中的所有类型都可以为空。即使使用默认值,也可以显式地将null作为参数传递。如果要绝对确定该值不为null,则必须保护设置该值的所有方法。在最初的示例中,粗体变量是public而不是final,这意味着您还必须保护setter

最后一个变量的示例:

class QText extends StatelessWidget {
  QText(this.text, this.size, [bool bold]) : this.bold = bold ?? false;

  final String text;
  final double size;
  final bool bold;
  ...
}
带有可设置粗体的示例:


您可以使用默认值,但它不能为您带来任何安全方面的好处。不过,它作为文档很有用。

目前,Dart中的所有类型都可以为空。即使使用默认值,也可以显式地将null作为参数传递。如果要绝对确定该值不为null,则必须保护设置该值的所有方法。在最初的示例中,粗体变量是public而不是final,这意味着您还必须保护setter

最后一个变量的示例:

class QText extends StatelessWidget {
  QText(this.text, this.size, [bool bold]) : this.bold = bold ?? false;

  final String text;
  final double size;
  final bool bold;
  ...
}
带有可设置粗体的示例:


您可以使用默认值,但它不能为您带来任何安全方面的好处。不过,它作为文档很有用。

这个问题似乎很快就过时了,因为在这种情况下,该语言很快就会防止null。在dev通道中已提供空安全性


更多信息:

这个问题似乎很快就过时了,因为在这种情况下,语言很快就会阻止null。在dev通道中已提供空安全性


更多信息:

真的吗?因此,您可以像在Javascript中一样执行此操作。那很酷。不知道为什么我没有尝试lol。这并不能阻止调用方显式地将null作为参数传递。更新了答案。真的吗?因此,您可以像在Javascript中一样执行此操作。那很酷。不知道为什么我没有尝试lol。这并不能阻止调用方显式地将null作为参数传递。更新了答案。