Flutter フレームワークに基づく個人用パッケージをアップグレードしています。ここで、Flutter Text ウィジェットのソース コードに null チェックがあることに気付きました。
if (textSpan != null) {
properties.add(textSpan!.toDiagnosticsNode(name: 'textSpan', style: DiagnosticsTreeStyle.transition));
}
ただし、textSpan!
まだ!
演算子を使用しています。演算子textSpan
を使用せずに null 非許容型に昇格する必要はありませんか? !
ただし、演算子を削除しようとすると、次のエラーが発生します。
An expression whose value can be 'null' must be null-checked before it can be dereferenced. Try checking that the value isn't 'null' before dereferencing it.
自己完結型の例を次に示します。
class MyClass {
String? _myString;
String get myString {
if (_myString == null) {
return '';
}
return _myString; // <-- error here
}
}
コンパイル時エラーが発生します。
エラー: タイプ '文字列?' の値 戻り値の型が「String」であるため、関数「myString」から返すことができません。
または、取得しようとすると_mySting.length
、次のエラーが表示されます。
レシーバーが「null」になる可能性があるため、プロパティ「長さ」に無条件にアクセスすることはできません。
_myString
null チェックを行うと、null非許容型に昇格すると思いました。なぜそうしないのですか?
私の質問は GitHub で解決されたので、以下に回答を投稿します。