我有Android开发背景,正在学习Flutter。
在Android中,通常的做法是使用Kotlin密封类从ViewModel返回状态,例如。
sealed class MyState {
data class Success(val data: List<MyObject>) : MyState()
data class Error(val error: String) : MyState()
}
我想在Flutter中使用类似的模式,并从BLOC类返回一个State对象。在Flutter中实现相同效果的最佳方法是什么?
答案 0 :(得分:2)
这种用例将使用命名工厂构造函数完成。
它需要更多代码,但行为是相同的。
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;
}
答案 1 :(得分:2)
以下是Flutter中密封类/工会的软件包
此软件包提供了处理数据类,Dart / Flutter中的密封类的功能
这是解释在Flutter中野兽使用冷冻包装的链接
答案 2 :(得分:1)
RémiRousselet 的答案在某种程度上是正确的,但正如 sindrenm 所述:
不幸的是,这不是一回事。 Kotlin密封类确保在给定类的定义文件之外没有其他任何给定类的实现。这意味着您可以通过仅提供所有可能的替代方案(无需考虑)来耗尽语句(在Dart中切换)。其他地方的潜在子类别
尽管在 dart语言上对此功能进行了积极的讨论:Algebraic Data Types,但是有一些库可以帮助您实现此行为。您可以使用以下库:
如果使用的是 BLoC 库,则可以使用以下库:
我希望 dart语言尽快添加此功能