Dart の enum を使う際、String 型との相互変換に迷うことがあります。
具体的には、Enum を含む object をjson でエンコードするときとか、逆に String で何か受け取ってそれに対応する Enum のインスタンスを返したいときとか。
Enum → String だけについて言えば、EnumにはtoString()メソッドがついてますが。ただ、これ、xx.yy の形で文字列が帰ってきます、欲しいのはyyだけなのに。
なので、一般的にはtoString() から ドット (.) を見つけてその後ろを取ってくる、みたいな実装がされてるようです。
String → Enum、つまり、Stringに対応するEnumを取得する方法もちょっと面倒で、Enum.values から対応するのを見つける必要があります。
なので、一発相互変換できるものないかなと探したら、ありがたいことにあった(ヤター)のでおいておきます。
記事執筆時点でバージョンは
enum_to_string: 1.0.14
アップデートは11月と最近なので、使えそうです。 一応中身を確認するとシンプルな実装で、メインの部分を抜き出すと
enum -> String
enumItem.toString().split('.')[1];
String -> enum
enumValues.singleWhere( (enumItem) => EnumToString.convertToString(enumItem, camelCase: camelCase) ?.toLowerCase() == value?.toLowerCase(), orElse: () => null)
もちろん他にも機能はいくつかありますが、コアの部分は実にシンプルなので、この部分だけ抜き出して使ってもいいと思います。
私は敬意と感謝をこめてstarを押し、ありがたくパッケージごと使わせていただくことにします。
使い方
1clickを惜しむあなた(私)のためにusage を書いておきます
import 'package:enum_to_string/enum_to_string.dart'; String EnumToString.convertToString(TestEnum.testValue1); EnumToString.fromString(TestEnum.values, "testValue1");
それでは。
参考
medium.com 特に役には立たなかったですが、こういうのもありかと。