メインコンテンツにスキップ

null許容値の未チェックな使用

null許容式は条件として使用できません。

null許容式は for-in ループのイテレータとして使用できません。

null許容式はスプレッド演算子内で使用できません。

null許容式は yield-each ステートメント内で使用できません。

関数が 'null' の可能性があるため、無条件に呼び出すことはできません。

レシーバが 'null' の可能性があるため、メソッド '{0}' を無条件に呼び出すことはできません。

レシーバが 'null' の可能性があるため、演算子 '{0}' を無条件に呼び出すことはできません。

レシーバが 'null' の可能性があるため、プロパティ '{0}' に無条件にアクセスすることはできません。

説明

#

型が潜在的に非nullである式を、nullでないことを確認せずに dereference(値を取り出すこと)した場合に、アナライザはこの診断を生成します。

#

次のコードは、参照されている時点で snull になる可能性があるため、この診断を生成します。

dart
void f(String? s) {
  if (s.length > 3) {
    // ...
  }
}

一般的な修正

#

値が実際に null になる可能性がある場合は、値が null でない場合にのみメンバーにアクセスするように、テストを追加してください。

dart
void f(String? s) {
  if (s != null && s.length > 3) {
    // ...
  }
}

式が変数であり、その値が決して null になるべきではない場合は、変数の型を非null許容に変更してください。

dart
void f(String s) {
  if (s.length > 3) {
    // ...
  }
}

式の値が決して null になるべきではないと確信しているが、変数の型を変更できず、間違っていた場合に実行時に例外が発生するリスクを許容できる場合は、値が null でないことをアサート(表明)できます。

dart
void f(String? s) {
  if (s!.length > 3) {
    // ...
  }
}