flutter_bloc 中的超级构造函数如何工作

flu*_*ter 6 dart flutter flutter-bloc

Dart,我理解super这样的工作原理:

class Foo {
  Foo(int a, int b) {
    //Code of constructor
  }
}

class Bar extends Foo {
  Bar(int a, int b) : super(a, b);
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白在 的(或)类super中使用时发生了什么。cubitblocsflutter_bloc

例如,我不明白CounterCubit类何时扩展CubitCounterCubit extends Cubit<CounterState>并且该类CounterState可以用作cubit.

class CounterState {
  int counterValue;
  CounterState({@required this.counterValue});
}



class CounterCubit extends Cubit<CounterState> {
  CounterCubit() : super(CounterState(counterValue: 0));
}
Run Code Online (Sandbox Code Playgroud)

小智 1

超级构造函数调用父类的构造函数。flutter_bloc 中的肘定义为。

abstract class Cubit<State> extends BlocBase<State> {
  Cubit(State initialState) : super(initialState);
}
Run Code Online (Sandbox Code Playgroud)

State在这里只是一个通用类类型,可以是您想要的任何类型。您可以在此处了解有关泛型的更多信息 制作计数器肘节的非常简单的代码是。

class CounterCubit extends Cubit<int> {
   CounterCubit() : super(0);

}
Run Code Online (Sandbox Code Playgroud)

Cubit<int>意味着您的 State 类型为 int 类型int,并将super(0)初始值 state 值设置为“0”。因此,本质上,肘的超级构造函数接受初始状态的值。

在你的情况下:

class CounterState {
  int counterValue;
  CounterState({@required this.counterValue});
}



class CounterCubit extends Cubit<CounterState> {
  CounterCubit() : super(CounterState(counterValue: 0));
}
Run Code Online (Sandbox Code Playgroud)

Cubit<CounterState>意味着您的 State 类型为 CounterState (这是您在上面声明的类)并super(CounterState(counterValue: 0))初始化一个对象,counterValue=0并且该对象通过超级构造函数作为初始状态传递。

我希望这能澄清你的问题。如果我的解释对您来说不够清楚,请告诉我