無効なnull許容演算子
要素は null にできないため、null 許容演算子 `?` は不要です。
マップエントリのキーは null にできないため、null 許容演算子 `?` は不要です。
マップエントリの値は null にできないため、null 許容演算子 `?` は不要です。
短絡評価のため、レシーバーは `null` になり得ないため、null 許容演算子 `{0}` は使用できません。
レシーバーは null にできないため、null 許容演算子 `{0}` は不要です。
説明
#null 非許容であることがわかっているレシーバーに対して null 許容演算子 (`?.`、`?..`、`?[`、`?..[`、または `...?`) が使用された場合に、アナライザーはこの診断を生成します。
例
#s が null になり得ないため、次のコードはこの診断を生成します。
int? getLength(String s) {
return s?.length;
}a が null になり得ないため、次のコードはこの診断を生成します。
var a = [];
var b = [...?a];s?.length が null を返せないため、次のコードはこの診断を生成します。
void f(String? s) {
s?.length?.isEven;
}s?.length が null を返せない理由は、`s` の後の null 許容演算子が、`s` が null の場合に `length` と `isEven` の両方の評価を短絡させるためです。つまり、`s` が null の場合、`length` も `isEven` も呼び出されず、`s` が null でない場合、`length` は null 値を返せません。いずれにせよ、`isEven` は null 値で呼び出すことはできないため、null 許容演算子は不要です。詳細については、「Null Safety の理解」を参照してください。
s が null になり得ないため、次のコードはこの診断を生成します。
void f(Object? o) {
var s = o as String;
s?.length;
}o は null になり得ますが、`s` が null になり得ない理由は、null 非許容型である String へのキャストによるものです。o の値が null になった場合、キャストは失敗し、`length` の呼び出しは行われません。
s が null になり得ないため、次のコードはこの診断を生成します。
List<String> makeSingletonList(String s) {
return <String>[?s];
}一般的な修正
#null 許容演算子を null 非許容の同等物に置き換えてください。たとえば、?. を . に変更します。
int getLength(String s) {
return s.length;
}(戻り値の型も null 非許容に変更されたことに注意してください。これは場合によっては適切でない可能性があります。)