如何从对象的实例访问它的静态常量?



我有一个对象,它有static constant我需要从它的实例访问。

class ChatsScreen extends StatefulWidget {
var arguments;
static const name = ADatas.chatRoute;
ChatsScreen(this.arguments);
createState() => ChatsScreenState();
}

在上面的类的状态对象中,我想调用static const name。上面类的状态对象的代码:

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; // => !!!
}
}
}

注意:我实际上并没有尝试获取路由名称。这只是我在这个问题中使用的一个概念,所以请不要参考更好的方法来获取 Flutter 中的路由名称。

你不能那样做,人们在这个问题上已经谈到了这一点。

但是,您可以使用类成员和键入系统来做到这一点。

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软件包中是被禁止的。有一个可反射的包试图使用代码生成来解决这个问题,但我不知道它的状态/可靠性。

最新更新