Dart2.17 から enum の機能が拡張されたようなので、使い方を試してみようと思います。(Enhanced Enums)
「さあ、はじめよう。」と思ったらいきなりエラー出ましたね。
SDK バージョンの下限が2.15.0
になってました。
This requires the 'enhanced-enums' language feature to be enabled. Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17.0 or higher, and running 'pub get'.
pubspec.yaml
のenvironment
部分を更新します。
sdkのバージョンが2.17.0
以上になるように設定してください。
environment:
sdk: ">=2.17.0 <3.0.0"
参考の medium の記事で紹介されている例を使っていきます。
enum のそれぞれの要素毎にコンストラクタを初期化できる。
enum Water {
frozen(32),
lukewarm(100),
boiling(212);
final int tempInFahrenheit;
const Water(this.tempInFahrenheit);
String toString() => "The $name water is $tempInFahrenheit F.";
}
ちなみにtoString()
メソッドのテキストの中の$name
のname
は Dart の 2.15 から追加されている機能ですね。
final w = Water.frozen;
print(w.name); //frozen
この状態で print
してみると、
print(Water.frozen); //The frozen water is 32 F.
print(Water.frozen.toString()); //The frozen water is 32 F.
なるほど。
print
しようとすると、オーバーライドしたtoString()
メソッドが勝手に反映されているのかな。
// @override
// String toString() => "The $name water is $tempInFahrenheit F.";
print(Water.frozen); //Water.frozen
うむ。当たり前ですが従来通り。
参考
https://medium.com/dartlang/dart-2-17-b216bfc80c5d
enhanced enums なら、enumの判定メソッドも実装可能なようですね。
今まではextension
を使って書く必要がありました。
enum Water {
frozen(32),
lukewarm(100),
boiling(212);
final int tempInFahrenheit;
const Water(this.tempInFahrenheit);
String toString() => "The $name water is $tempInFahrenheit F.";
bool get isFrozen => this == frozen;
}
enum をよく条件分岐の際に使うのですが、if 文の中で以下のような条件を書くのが面倒だと思っていました。(特に enum の名前が長いときは)
if(type == SampleType.typeA){
...
}
Enhanced Enumsを使う必要がない場合には、従来通りextension
を作成する必要がありそうです。
extension を使った書き方はこちらの記事にまとめてあります。
https://www.kamo-it.org/blog/flutter-extension/
いかがでしたか?
ざっくりと試してみましたが、「enum に state を持たせたい」というケースがないか意識していないと、enhanced enumsを使おうと思えない気がしますね。
使えるタイミングを探って、ぜひ試してみてください!
https://medium.com/dartlang/dart-2-17-b216bfc80c5d https://qiita.com/hosikiti/items/9242a9e1d50c1dc5faa2 https://codewithandrea.com/tips/enums-with-members-dart-2.17
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More