gpt4 book ai didi

Dart:枚举上的扩展方法不起作用为类定义的 "The method isn' t"

转载 作者:行者123 更新时间:2023-12-03 03:08:42 30 4
gpt4 key购买 nike

基础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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com