Dart の Enum ⇄ String の相互変換を実現するpackage

Dartenum を使う際、String 型との相互変換に迷うことがあります。

具体的には、Enum を含む object をjsonエンコードするときとか、逆に String で何か受け取ってそれに対応する Enumインスタンスを返したいときとか。

Enum → String だけについて言えば、EnumにはtoString()メソッドがついてますが。ただ、これ、xx.yy の形で文字列が帰ってきます、欲しいのはyyだけなのに。

なので、一般的にはtoString() から ドット (.) を見つけてその後ろを取ってくる、みたいな実装がされてるようです。

String → Enum、つまり、Stringに対応するEnumを取得する方法もちょっと面倒で、Enum.values から対応するのを見つける必要があります。

なので、一発相互変換できるものないかなと探したら、ありがたいことにあった(ヤター)のでおいておきます。

pub.dev

記事執筆時点でバージョンは

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");

それでは。

参考

pub.dev

medium.com 特に役には立たなかったですが、こういうのもありかと。