Enum from String

前端 未结 18 2064
温柔的废话
温柔的废话 2020-12-15 14:54

I have an Enum and a function to create it from a String because i couldn\'t find a built in way to do it



        
18条回答
  •  太阳男子
    2020-12-15 15:33

    Using mirrors you could force some behaviour. I had two ideas in mind. Unfortunately Dart does not support typed functions:

    import 'dart:mirrors';
    
    enum Visibility {VISIBLE, COLLAPSED, HIDDEN}
    
    class EnumFromString {
      T get(String value) {
        return (reflectType(T) as ClassMirror).getField(#values).reflectee.firstWhere((e)=>e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
      }
    }
    
    dynamic enumFromString(String value, t) {
      return (reflectType(t) as ClassMirror).getField(#values).reflectee.firstWhere((e)=>e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
    }
    
    void main() {
      var converter = new EnumFromString();
    
      Visibility x = converter.get('COLLAPSED');
      print(x);
    
      Visibility y = enumFromString('HIDDEN', Visibility);
      print(y);
    }
    

    Outputs:

    Visibility.COLLAPSED
    Visibility.HIDDEN
    

提交回复
热议问题