文字列からの列挙型 質問する

文字列からの列挙型 質問する

組み込みの方法を見つけられなかったので、Enumと からそれを作成する関数がありますString

enum Visibility{VISIBLE,COLLAPSED,HIDDEN}

Visibility visibilityFromString(String value){
  return Visibility.values.firstWhere((e)=>
      e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
}

//used as
Visibility x = visibilityFromString('COLLAPSED');

しかし、持っているすべての Enum に対してこの関数を書き直す必要があるようです。Enum 型をパラメーターとして受け取る同じ関数を記述する方法はありますか? 試してみましたが、Enum にキャストできないことがわかりました。

//is something with the following signiture actually possible?
     dynamic enumFromString(Type enumType,String value){

     }

ベストアンサー1

ミラーは常に利用できるとは限りませんが、幸いなことに必要ありません。これは適度にコンパクトで、必要な機能を果たすはずです。

enum Fruit { apple, banana }

// Convert to string
String str = Fruit.banana.toString();

// Convert to enum
Fruit f = Fruit.values.firstWhere((e) => e.toString() == 'Fruit.' + str);

assert(f == Fruit.banana);  // it worked

回答を訂正してくれた@frostymarvelousに感謝します

おすすめ記事