获取Dart类的名称作为Type或String

Ram*_*h-X 4 dart flutter

我需要解决的问题

是否有一种方式来获得的类名dart class作为一个String或一个Type物体..?

class MyClass {
}
var myClass = MyClass();
Run Code Online (Sandbox Code Playgroud)

我知道propertyruntimeType它将返回对象的类型作为Type对象。但是类有类似的功能吗?

print(myClass.runtimeType.toString());
Run Code Online (Sandbox Code Playgroud)

我目前正在做的是创建一个类的对象并使用它runtimeType

String type = MyClass().runtimeType.toString();
Run Code Online (Sandbox Code Playgroud)

注意:在每个类中都有python一个变量__name__,它可以满足我的需要。

我的意图

我的最终目标是使用以前保存的类名称创建dart对象。在本期中,他们提出了一种使用Maps 的方法。
问题是我有很多类,在我的情况下该方法看起来很混乱。

我目前要做的是通过以下方式保存对象类型:

var saving = myClass.runtimeType.toString();
Run Code Online (Sandbox Code Playgroud)

并且在加载时:

if (saving == MyClass().runtimeType.toString()) {
    return MyClass();
}
Run Code Online (Sandbox Code Playgroud)

根据您的经验和意见,您可以提出更好的解决方案吗?

谢谢!!!

Nae*_*Nae 20

您可以使用:

var runtimeTypeName = (MyClass).toString();
Run Code Online (Sandbox Code Playgroud)

或泛型:

var runtimeTypeName = T.toString();
Run Code Online (Sandbox Code Playgroud)

  • 另外,为了避免调用 `.toString()` 方法,您可以使用插值并使其更短:`'$MyClass'`,这也会产生类名。 (9认同)
  • @AjayGautam 如果没有它们,编译器将查找名为“toString”的特定类的静态方法。括号将特定类的类型转换为“Type”并使用其方法。 (4认同)
  • 实际上,你不需要使用`(MyClass as Type)`,你可以直接写`(MyClass).toString()` (3认同)

Rém*_*let 5

类类型可以用作Type

Type myType = MyClass;
Run Code Online (Sandbox Code Playgroud)