Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 可以在Dart中定义一个抽象的命名构造函数吗?_Firebase_Dart_Flutter_Google Cloud Firestore_Abstract Class - Fatal编程技术网

Firebase 可以在Dart中定义一个抽象的命名构造函数吗?

Firebase 可以在Dart中定义一个抽象的命名构造函数吗?,firebase,dart,flutter,google-cloud-firestore,abstract-class,Firebase,Dart,Flutter,Google Cloud Firestore,Abstract Class,我试图创建一个抽象类Firestorable,它将确保子类重写命名构造函数fromMap(Map-Map) 代码看起来像这样 抽象类Firestorable{ ///具体的实现将把它们的状态转换为 ///Firestore安全[地图]表示。 映射toMap(); ///具体实现将初始化其状态 ///来自Firestore提供的[地图]。 Firestorable.fromMap(地图地图); } 类武器靶场实现了可储存火种{ int有效范围; int最大范围; 武器射程({this.effect

我试图创建一个抽象类
Firestorable
,它将确保子类重写命名构造函数
fromMap(Map-Map)

代码看起来像这样

抽象类Firestorable{
///具体的实现将把它们的状态转换为
///Firestore安全[地图]表示。
映射toMap();
///具体实现将初始化其状态
///来自Firestore提供的[地图]。
Firestorable.fromMap(地图地图);
}
类武器靶场实现了可储存火种{
int有效范围;
int最大范围;
武器射程({this.effectiveRange,this.maximumRange});
@凌驾
武器射程。从地图(地图地图){
effectiveRange=map['effectiveRange']>5;
maximumRange=map['maximumRange']??有效范围;
}
@凌驾
映射toMap(){
返回{
“有效范围”:有效范围,
“maximumRange”:maximumRange??有效范围,
};
}
}
当我这样做时,我没有得到任何错误,但是当我忽略
fromMap(…)
构造函数的具体实现时,我也没有得到编译错误

例如,以下代码将在编译时不会出现任何错误:

抽象类Firestorable{
///具体的实现将把他们的状态转化为
///Firestore安全[地图]表示。
Map convertToMap();
///具体实现将初始化其状态
///来自Firestore提供的[地图]。
Firestorable.fromMap(地图地图);
}
类武器靶场实现了可储存火种{
int有效范围;
int最大范围;
武器射程({this.effectiveRange,this.maximumRange});
//@覆盖
//武器射程。从地图(地图地图){
//effectiveRange=map['effectiveRange']>5;
//maximumRange=map['maximumRange']??有效范围;
//   }
@凌驾
映射转换映射(){
返回{
“有效范围”:有效范围,
“maximumRange”:maximumRange??有效范围,
};
}
}

我是否不能定义一个抽象的命名构造函数,并将其作为一个具体类中的必需实现?如果没有,正确的方法是什么?

如Dart语言官方指南中所述,因此您不能将工厂构造函数强制用于子类。为了确保实现,它应该是类接口的一部分,而构造函数不是。有关更多信息,您可以查看这些相关的stackoverflow问题:


另外,我还正在开发一个“Firestorable”实现,以使访问firebase更容易。与您类似,我希望强制程序员实现toMap和fromMap方法。你介意分享一下你是如何实现这一点的吗?有解决办法吗?我尝试使用抽象静态方法进行接口,但dart也不支持这种方法,因此,我只能束手无策。让我知道:)@Jens我最终选择了另一个方向,并使用省道注释创建了一个生成器。它没有相同的强制,但为我提供了一个更完整的解决方案,可以根据类中的属性/注释为我生成序列化方法。从长远来看,我还想实现一个插件,使我能够为模型和实体类生成代码。将记住注释!