簡體   English   中英

Dart 確保類中的可選布爾值不為空

[英]Dart make sure optional boolean in class is not 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..
  }
}

由於字段是最終嘗試在構造函數初始化期間傳遞默認值。

還要添加一個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作為參數傳遞。 如果您想絕對確定該值不為null ,則必須保護設置該值的所有方法。 在最初的例子中, bold變量是 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;
  ...
}

帶有可設置bold示例:

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

  final String text;
  final double size;
  bool _bold;

  bool get bold => _bold;
  void set bold(bool bold) { this._bold = bold ?? false; }
  ...
}

您可以使用默認值,但它不會為您帶來安全方面的任何好處。 不過,它作為文檔很有用。

您需要在構造函數中定義變量的默認值:

像下面這樣:

QText(this.text, this.size, [this.bold = false]): assert(bold != null,"bold cannot be null.");

如果沒有在bold變量中傳遞任何內容,那么它將采用默認值作為false

編輯

您可以使用斷言來阻止用戶傳遞 null,如果斷言失敗,您還可以打印一條消息。

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

似乎這個問題很快就過時了,因為在這種情況下語言很快就會阻止 null 。 空安全已經在開發頻道中可用。

更多信息: https : //medium.com/dartlang/annoucing-sound-null-safety-defd2216a6f3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM