Dart 2.0中是否有密封类替代方案?
我有Android开发背景,正在学习颤振 在Android中,通常使用Kotlin密封类从ViewModel返回状态,例如Dart 2.0中是否有密封类替代方案?,dart,flutter,Dart,Flutter,我有Android开发背景,正在学习颤振 在Android中,通常使用Kotlin密封类从ViewModel返回状态,例如 sealed class MyState { data class Success(val data: List<MyObject>) : MyState() data class Error(val error: String) : MyState() } 密封类MyState{ 数据类成功(val数据:列表):MyState() 数据类错误
sealed class MyState {
data class Success(val data: List<MyObject>) : MyState()
data class Error(val error: String) : MyState()
}
密封类MyState{
数据类成功(val数据:列表):MyState()
数据类错误(val错误:String):MyState()
}
我想在flatter中使用类似的模式,并从BLOC类返回一个State对象。在颤振中实现相同效果的最佳方法是什么?此类用例将使用指定的工厂构造函数完成 它需要更多的代码,但行为是一样的
class MyState {
MyState._();
factory MyState.success(String foo) = MySuccessState;
factory MyState.error(String foo) = MyErrorState;
}
class MyErrorState extends MyState {
MyErrorState(this.msg): super._();
final String msg;
}
class MySuccessState extends MyState {
MySuccessState(this.value): super._();
final String value;
}
Rémi Rousselet的回答在某种程度上是正确的,但正如sindrenm所提到的:
不幸的是,这不是一回事。Kotlin密封类保证在定义它们的文件之外没有给定类的其他实现。这意味着您可以将when语句(在Dart中切换)作为case提供所有可能的替代,而不必考虑其他地方的潜在子类 虽然在dart语言上有关于此功能的积极讨论,但有一些库可以帮助您实现此行为。您可以使用以下库: 如果您使用的是BLoC库,则可以使用以下库:
我希望,dart语言尽快添加此功能这是用于Flatter中密封类/联合的软件包 这个包提供了处理数据类的特性,在Dart/flift中是密封类 下面的链接解释了beast在Flitter中使用冷冻包的原因
我需要实例化它以返回错误或成功结果,例如:if(…)return MyState.success(someData)else return MyState.error(“错误消息”)非常好!感谢@rémi rousselet,这里还记录了使用抽象类并实现其接口的模式变体:不幸的是,这不是同一件事。Kotlin密封类保证在定义它们的文件之外没有给定类的其他实现。这意味着您可以在语句(
在Dart中切换
)时使用,只需提供所有可能的备选方案作为案例,而不必考虑其他地方潜在的子类。@sindrenm确实如此。看看是什么把这里的原理展示推得更远,并包括像when
这样的东西。对!是的,我想这可以通过一个代码生成库来完成。