[解決済み] Dartのパラメータは、その型のために'null'という値を持つことができません。
質問
ダーツ機能
以下のDart関数がありますが、現在null safetyを使用しています。
void calculate({int factor}) {
// ...
}
アナライザが文句を言う。
パラメータ 'factor' はその型から 'null' という値を持つことができず、null でないデフォルト値も提供されていません。
Flutterウィジェット
これは、私の
StatelessWidget
をFlutterで使用した場合です。
class Foo extends StatelessWidget {
const Foo({Key key}): super(key: key);
// ...
}
以下のようなエラーが出ます。
パラメータ 'key' はその型から 'null' という値を持つことができず、null でないデフォルト値も提供されていません。
この問題を解決するにはどうすればよいですか。
どのように解決するのですか?
なぜ
このようなことが起こるのは
null セーフティが有効で
で、あなたの
非ヌル
パラメータ
factor
または
key
できない
である
null
.
関数とコンストラクタの中で、これらの値
があるかもしれません。
である
null
という名前のパラメータ無しで関数が呼ばれた場合。
calculate()
または
Foo()
. しかし、型 (
int
と
Key
) は
NULLでない
であり、これは
無効
のコードであり、決してNULLであってはなりません。
ソリューション
これを解決するには、基本的に3つの方法があります。
required
これはおそらくこの問題に対する最も一般的な解決策であり、これは変数
が設定されなければならないことを表しています。
. これはつまり、もし私たちが(注目すべきは
required
キーワード)。
void calculate({required int factor}) {
// ...
}
ということを示しています。
factor
パラメータは常に指定されなければならないので、問題は解決されます。
calculate(factor: 42)
などだけが有効な関数の呼び出しとなるため、問題が解決されます。
デフォルトの値
もう一つの解決策は、デフォルト値を提供することです。パラメータにデフォルト値があれば、関数を呼び出す際にパラメータを指定しなくても、デフォルト値が代わりに使用されるため安全です。
void calculate({int factor = 42}) {
// ...
}
では
calculate()
の呼び出しは
42
を
factor
として、明らかに非NULLであることがわかります。
Null可能なパラメータ
3つ目の解決策は、本当に検討したいことです。すなわち、NULL可能なパラメータを持ちたいですか?もしそうなら、関数で使用するときにパラメータをヌルチェックする必要があります。
しかし、これは、最も一般的に
Key key
の問題を解決する方法です。なぜなら、Flutter では常にウィジェットにキーを提供したいとは思わないからです (nullable の
Key?
型に注意)。
class Foo extends StatelessWidget {
const Foo({Key? key}): super(key: key);
// ...
}
これで、安全に
Foo()
を安全に構築できるようになりました。
位置決めパラメータ
にも適用されることに注意してください。
位置パラメーター
パラメータも同様です。すなわち、それらは nullable または non-nullable にすることができますが、それらは
required
でアノテーションすることはできず、デフォルト値を持つことはできません。
常に必要
を渡さなければならないからです。
void foo(int param1) {} // bar(null) is invalid.
void bar(int? param1) {} // bar(null) is valid.
関連
-
[解決済み] 依存関係がヌルセーフティをサポートしていないため、サウンドヌルセーフティで実行できない
-
[解決済み] Flutterを使ってローカルストレージに保存するには?
-
[解決済み] flutterで空のビューを表示するには?
-
[解決済み] Flutter: タッチスクリーンでのスクロールを無効にするListView
-
[解決済み] Flutterのアウトラインがandroid studioで "Nothing to show "と表示される。
-
[解決済み] FlutterでSafeAreaを使用する
-
[解決済み] Flutter: 静的ターゲットが見つからない場合の未実装の処理
-
[解決済み] FlutterのshrinkWrapプロパティは何をするのですか?
-
[解決済み] FlutterのScaffold AppBarからドロップシャドウを削除する?
-
[解決済み] フラッター 前の画面に戻ることなく、新しい画面に移動する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Dartの名前付きパラメータと位置付きパラメータの違いは何ですか?
-
[解決済み] TextFieldの高さと幅を変更するには?
-
[解決済み] Flutter。画面の向きをオンデマンドで設定・ロックする方法
-
[解決済み] Flutter 条件に応じてリストをフィルタリングする
-
[解決済み] Flutter StreamBuilderとFutureBuilderの比較
-
[解決済み] 丸みを帯びたボーダーを持つボタンを作成する [重複]。
-
[解決済み] flutterのtextfieldでカーソルの位置を値の最後に設定するには?
-
[解決済み] DartのNull Safetyとは何ですか?
-
[解決済み] flutterで丸みを帯びたTextFieldを作るには?
-
[解決済み] dartで日付に月/年を加算/減算する?