問題
?? と ?:を併用したときに、
conditions must have a static type of bool
というエラーが出てしまう
例えば、
sample.dart
int? nullOrInt() {
return 0;
}
void main() {
final a = nullOrInt();
print(a ?? 0 > 10 ? 'isTrue' : 'isFalse');
}
エラー表示である赤線の範囲から、staticではない、ということなのか……? と思いつつ
解決
a ?? 0の式に対して()でくくる
sample.dart
int? nullOrInt() {
return 0;
}
void main() {
final a = nullOrInt();
print((a ?? 0) > 10 ? 'isTrue' : 'isFalse');
}
原因はどうやら式のなかの評価の順序が意図していないものになっていたらしく、
具体的には > が先に評価されることで
a ?? false ? 'isTrue' : 'isFalse'
と認識されてしまい、三項演算子の評価にboolではないint aがそのまま乗ってしまっていたということでした
insideで変な使用があるとかではなかった様……お恥ずかしい
最初は即時関数 (){}() とか使用していましたが、普通に () 使えばいいや、と気づきました
参考になれば幸いです