Flutter 空函数(子类型)为';t无效函数的有效重写(父类型)

Flutter 空函数(子类型)为';t无效函数的有效重写(父类型),flutter,dart,Flutter,Dart,我正在尝试创建父类型(IDataProvider)和子类型(ILocalDataProvider),然后在类中指定子类型来代替父类型。我的意思是: abstract class IDataProvider { ValueType get<ValueType>(String keyToRead); } abstract class ILocalDataProvider extends IDataProvider { bool isKeyExistent(String key)

我正在尝试创建父类型(
IDataProvider
)和子类型(
ILocalDataProvider
),然后在类中指定子类型来代替父类型。我的意思是:

abstract class IDataProvider {
  ValueType get<ValueType>(String keyToRead);
}

abstract class ILocalDataProvider extends IDataProvider {
  bool isKeyExistent(String key);
}

abstract class IDataSource {
  IDataProvider dataProvider;
}

class LocalDataSource implements IDataSource {
  LocalDataSource({@required this.dataProvider});

  @override
  ILocalDataProvider dataProvider; //*************** ERROR ON THIS LINE **********//
}
抽象类IDataProvider{
ValueType获取(字符串键读取);
}
抽象类ILocalDataProvider扩展IDataProvider{
bool iskeyexisting(字符串键);
}
抽象类IDataSource{
IDataProvider数据提供者;
}
类LocalDataSource实现IDataSource{
LocalDataSource({@required this.dataProvider});
@凌驾
ILocalDataProvider dataProvider;//*************此行出错**********//
}
我得到了这个错误:

'LocalDataSource.dataProvider='('void函数(ILocalDataProvider)') 不是对“IDataSource.dataProvider=”(“void”)的有效重写 功能(IDataProvider)')


我认为由于ILocalDataProvider是IDataProvider的一个子类型,它将被识别为IDataProvider??我做错了什么?

你不能那样做。函数的签名必须完全匹配。但是,您可以使用这样的泛型参数:
抽象类IDataSource{}

谢谢。因此父类将被更改为:
抽象类IDataSource{
,子类的声明如下
类LocalDataSource实现IDataSource{
。我已经开始工作了,所以如果这是你的意思,我会接受。几乎。按照你的方式,现在参数可以采用任何类型,这可能不是你想要的。要将泛型参数绑定到IDataProvider,请执行以下操作:抽象类IDataSourceWorks很棒。谢谢!请参阅和。