InDart
,我理解super
是这样工作的:
class Foo {
Foo(int a, int b) {
//Code of constructor
}
}
class Bar extends Foo {
Bar(int a, int b) : super(a, b);
}
当super
在flutter_bloc
的cubit
(或blocs
)类中使用时,我真的不明白发生了什么。
我不理解,例如,当CounterCubit
类扩展Cubit
:CounterCubit extends Cubit<CounterState>
和CounterState
类可以用作cubit
的参数。
class CounterState {
int counterValue;
CounterState({@required this.counterValue});
}
class CounterCubit extends Cubit<CounterState> {
CounterCubit() : super(CounterState(counterValue: 0));
}
超构造函数调用父类的构造函数。flutter_bloc中的cubit定义为。
abstract class Cubit<State> extends BlocBase<State> {
Cubit(State initialState) : super(initialState);
}
State在这里只是一个泛型类类型,可以是你想要的任何类型。您可以在这里了解更多关于泛型的信息制作计数器的一个非常简单的代码是。
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
}
Cubit<int>
表示这里的State类型为int
,super(0)
将初始值State值设置为"0";因为您的值是int类型。所以本质上,库比特的超级构造函数接受初始状态的值。
在你的例子中:
class CounterState {
int counterValue;
CounterState({@required this.counterValue});
}
class CounterCubit extends Cubit<CounterState> {
CounterCubit() : super(CounterState(counterValue: 0));
}
Cubit<CounterState>
意味着你的状态类型是CounterState(这是你在上面声明的一个类),super(CounterState(counterValue: 0))
用counterValue=0
初始化一个对象,该对象通过超级构造函数作为初始状态传递。