Dart 如何传递实例';s构造函数作为函数的类型

Dart 如何传递实例';s构造函数作为函数的类型,dart,Dart,我试图为我的模型创建一个基类,但我遇到了一个错误名称“cls”不是一个类型,因此不能用作类型参数。。那么,如何将对象的构造函数传递给Hive.box方法呢 import'package:hive/hive.dart'; 类应用模型{ @HiveField(0) int-id; @HiveField(1) 创建日期时间; @HiveField(2) DateTime updatedAt; save()异步{ 最终类型cls=this.runtimeType; //名称“cls”不是类型,因此不能用

我试图为我的模型创建一个基类,但我遇到了一个错误
名称“cls”不是一个类型,因此不能用作类型参数。
。那么,如何将对象的构造函数传递给Hive.box方法呢

import'package:hive/hive.dart';
类应用模型{
@HiveField(0)
int-id;
@HiveField(1)
创建日期时间;
@HiveField(2)
DateTime updatedAt;
save()异步{
最终类型cls=this.runtimeType;
//名称“cls”不是类型,因此不能用作类型参数。
final-Box=wait-Hive.openBox(cls.toString());
等待框。放置(this.id,this);
归还这个;
}
}
@HiveType(类型ID:0)
类UserModel扩展了AppModel{
@HiveField(3)
字符串电子邮件;
@HiveField(4)
字符串显示名;
}
void main(){
最终用户模型用户=用户模型()
..电子邮件=user@domain.com'
…显示名称='john doe';
user.save()。然后(){
打印(“已保存”);
});
}

Dart无法引用此
的动态类型(“自类型”)

处理此类事情的方法通常是使用自类型作为类型参数,因此:

类AppModel{
save()异步{
final Box=wait Hive.openBox(T.toString());
等待框。put(this.id,this as T);
归还这个;
}
...
然后确保每个子类告诉超类它是什么类型:

类UserModel扩展了AppModel{ ... }
(或者,如果您希望最终子类化
UserModel

类UserModel扩展了AppModel{ ... } 这样子类仍然可以传递其类型)

您也在谈论构造函数,因此没有简单的解决方案。 Dart的类型参数是类型,而不是类。不能从类型变量访问静态成员或构造函数,也没有其他方法传递类

让某个东西调用它不静态引用的构造函数的唯一方法是将构造函数调用封装在函数中并传递该函数。 (我看不出你怎么需要这里的构造函数)