我有一个对象,该对象具有static constant
,需要从其实例访问。
class ChatsScreen extends StatefulWidget {
var arguments;
static const name = ADatas.chatRoute;
ChatsScreen(this.arguments);
createState() => ChatsScreenState();
}
在上述类的State对象中,我想调用static const name
。上面的类的State对象的代码:
class ChatsScreenState extends State<ChatsScreen> with RouteHelper{
String userName = "";
var textEditingController = TextEditingController();
@override
void initState() {
getRouteName(widget); //=> as I understand and see on the VSCode, its the ChatsScreen object.
super.initState();
}
}
我正在尝试实现一个接口,因此在编写该接口时我不知道实际的类名。而且我认为,如果我知道它的实际类别,就可以达到其静态常数。我写了这样的东西,但似乎不可能。我想我有个误会。
class RouteHelper{
String getRouteName(dynamic instance){
if(instance is StatefulWidget){
return instance.runtimeType.name; // => !!!
}
}
}
注意:我并不是想实际获得路线名称。这只是我在此问题中使用的一个概念,因此请不要提出更好的方法来使路线名称井井有条。
答案 0 :(得分:1)
您不能那样做,人们在this issue中谈到了这一点。
不过,您可以使用类成员和键入系统来完成此操作。
abstract class Routed {
String getClassRoute();
}
class ChatsScreen extends StatefulWidget implements Routed {
var arguments;
static const name = "myexampleroutename";
ChatsScreen(this.arguments);
createState() => ChatsScreenState();
@override
String getClassRoute() {
return ChatsScreen.name;
}
}
class RouteHelper {
String getRouteName(Routed instance) {
return instance.getClassRoute();
}
}
我说不能,但是使用dart:mirrors是可以的,但是在Flutter软件包中是banned。有reflectable软件包试图使用代码生成来解决此问题,但我不知道它的状态/可靠性。