Dart 2.0中是否有密封类替代方案?

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() 数据类错误

我有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()
数据类错误(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
这样的东西。对!是的,我想这可以通过一个代码生成库来完成。