我试图构建一个抽象类,需要Dart中的命名构造函数。给定一些Map(m),这个泛型类型必须能够实例化它自己。
Dart编译器正在抛出T.fromJson -> Invalid constructor name.
我尝试编码:
abstract class JsonMap<T> {
Map toJson();
T.fromJson(Map m);
}
我挣扎着相同的概念(在同一个地方... API解析:)))我没有找到一个合适的解决方案。
但也许你可以在检查块模式时使用我发现的这个东西(我没有将它用于我的模型部分):
abstract class SomeBase {
void load();
}
class Provider<T extends SomeBase> extends InheritedWidget {
final T something;
Provider({
Key key,
@required this.something,
}): super(key: key);
@override
bool updateShouldNotify(_) {
return true;
}
static Type _typeOf<T>() => T;
static T of<T extends SomeBase>(BuildContext context){
final type = _typeOf<Provider<T>>();
Provider<T> provider = context.inheritFromWidgetOfExactType(type);
return provider.something;
}
}
或者只是使用它而不将其封装在继承的小部件中,并提供已经初始化的对象(如用户或您要解析的任何内容),只需从提供的JSON中加载值。
您正在创建一个名为JsonMap
的类,该类在T
类型上进行参数化。 T
不是你班级的名字,所以T.fromJson
不是JsonMap
的有效命名构造函数。
如果你想让JsonMap
有一个命名的构造函数,它应该是JsonMap.fromJson(Map m)
。