我有一个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');
Run Code Online (Sandbox Code Playgroud)
但似乎我必须为每个Enum重写此函数,有没有办法在Enum类型作为参数的情况下编写相同的函数?我试图但我发现我不能投于Enum.
//is something with the following signiture actually possible?
dynamic enumFromString(Type enumType,String value){
}
Run Code Online (Sandbox Code Playgroud) 基于这个问题,我在 dart 中创建了一个带有扩展方法的枚举:
enum TagVisibility {
public,
shared,
private,
}
extension on TagVisibility {
String get german {
switch(this){
case TagVisibility.public: return "Für alle sichtbar";
case TagVisibility.shared: return "Für alle mit demselben Tag sichtbar";
case TagVisibility.private: return "Nur für mich sichtbar";
default: throw Exception("enum has more cases");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是Error: The method 'german' isn't defined for the class 'TagVisibility'.当我尝试调用此扩展方法时出现错误:
import 'package:prototype/models/visibility.dart';
...
DropdownButton<TagVisibility>(
hint: Text("Wähle die Sichtbarkeit für diesen Tag"),
value: _visibility ?? _visibilityDefault,
onChanged: …Run Code Online (Sandbox Code Playgroud)