Flutter: switch文で「The switch case expression type 'double' can't override the '==' operator.」のエラー
結論:switch文の値にはdouble型ではなくint型(整数)を使う
2022/12/6 Flutter エラー・バグ日記
常識だったのかもしれないが、全然知らずに詰まった。
スライダー(Slider)を使う際に、「switch」文を使っていたら、赤い波線が表示され、以下の文法エラーが出ていた。
Documentationの意味がわからず。。
doubleが「==」をオーバーライドできないとのこと。よく分からないので、リンク先の「Documentation」を読んでみるが、
次のコードでは、キーワード case (C(0)) に続く式の型が C であり、クラス C が == 演算子をオーバーライドするため、この診断が生成されます。(Google翻訳)
とのことで、何のことだか理解が追いつかず。。
if文に変更せよ
リンク先の「Common fixes」のところを見ると、
強い理由がない場合は、if-else を使用するようにコードを書き直してください。(Google翻訳)
とのこと。
if elseでも書けなくはないが、できればswitch文を使いたい。
この時点でも、なぜエラーになるのか理解できず。。
実はdoubleとboolは使えなかった。。
ググってみると、こちらに大変わかりやすい解説があった(ありがとうございます!)。
なんと、、、switch文では、double型とbool型を使用できないとのこと。
恥ずかしながら、全然知らなかった。。。
調べてみると、JavaやCでも同様にdoubleが使えないらしく、switch文の常識だった模様。
Sliderと組み合わせるため、toInt()で整数化する
「Slider」の「value」プロパティには、double型しか設定できないため、スライダーと組み合わせてswitch文を使いたい場合に困る。。
そこで、単純ではあるが、「toInt()」メソッドで「Slider」の「value」プロパティの値を整数化した上で、switch文に用いることにした。
「value」プロパティに、小数点以下の端数がある場合は、10倍するなどして、整数化した上で、「toInt()」すれば対処できそう。
やや面倒だが、switch文の一般的な制約らしいので、仕方がない。勉強になった。
\一般的なエラー対処法をまとめた記事はこちら/
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/