作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基础this Question我使用扩展方法在 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");
}
}
}
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: (visibility) {
setState(() {
_visibility = visibility;
});
},
// items: List<DropdownMenuItem<TagVisibility>>(
items: TagVisibility.values.map((visibility) => DropdownMenuItem(
value: visibility,
child: Text('${visibility.german()}'), // doesn't work
// child: Text('${visibility.toString()}'), // works, but I want the custom messages.
),
).toList(),
),
最佳答案
您需要为扩展程序命名。
Dart 扩展可以在没有名称的情况下声明,但这只是意味着它们被赋予了一个新的私有(private)名称,因此扩展只能在声明它的库中访问。您基本上永远不需要没有名称的扩展名。
如果您给它一个公共(public)名称,那么扩展可以与枚举一起导入其他库。
关于Dart:枚举上的扩展方法不起作用为类定义的 "The method isn' t",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60800212/
我是一名优秀的程序员,十分优秀!