どうして
これが発生する理由は、null の安全性が有効になっているため、null非許容パラメーターfactor
orを にkey
できないためnull
です。
関数とコンストラクターでは、これらの値は、名前付きパラメーターなしで関数が呼び出された場合に発生する可能性があります:または. ただし、型 (および) はnull 非許容であるため、これは無効なコードです。決して null であってはなりません。null
calculate()
Foo()
int
Key
ソリューション
これを解決するには、基本的に次の 3 つの方法があります。
required
これは、おそらくこの問題に対する最も一般的な解決策であり、変数を設定する必要があることを示しています。これは、(required
キーワードに注意してください) 次の場合を意味します。
void calculate({required int factor}) {
// ...
}
factor
パラメータを常に指定する必要があることを示します。これにより、問題が解決されますcalculate(factor: 42)
。関数の有効な呼び出しになります。
デフォルト値
別の解決策は、デフォルト値を提供することです。パラメータにデフォルト値がある場合、代わりにデフォルト値が使用されるため、関数を呼び出すときにパラメータを安全に指定できません。
void calculate({int factor = 42}) {
// ...
}
これで、calculate()
呼び出しは として使用42
されますがfactor
、これは明らかに非 null です。
Null 許容パラメーター
3 番目の解決策は、本当に検討したいことです。つまり、null 許容パラメーターを使用しますか? その場合、関数で使用するときにパラメーターを null チェックする必要があります。
Key key
ただし、 Flutter でウィジェットに常にキーを提供する必要があるとは限らないため、問題を解決する最も一般的な方法です(null 許容Key?
型に注意してください)。
class Foo extends StatelessWidget {
const Foo({Key? key}): super(key: key);
// ...
}
これで、キーを指定せずに安全に構築できFoo()
ます。
定位置パラメーター
同じことが位置パラメータにも当てはまることに注意してください。つまり、null 許容または非 null 許容にすることができますが、常に渡す必要required
があるため、注釈を付けたり、デフォルト値を設定したりすることはできません。
void foo(int param1) {} // bar(null) is invalid.
void bar(int? param1) {} // bar(null) is valid.