[英]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.