Dart Flutter 中的零参数构造函数是什么?
在颤振中创建一个块时,我收到以下错误
The superclass 'Bloc<QuoteEvent, QuoteState>' doesn't have a zero argument constructor.
Try declaring a zero argument constructor in 'Bloc<QuoteEvent, QuoteState>', or explicitly invoking a different constructor in 'Bloc<QuoteEvent, QuoteState>'.
Run Code Online (Sandbox Code Playgroud)
请指导如何修复它。谢谢
下面是代码
import 'package:meta/meta.dart';
import 'package:bloc/bloc.dart';
import 'package:random_quote/repositories/repositories.dart';
import 'package:random_quote/models/models.dart';
import 'package:random_quote/bloc/bloc.dart';
class QuoteBloc extends Bloc<QuoteEvent, QuoteState> {
final QuoteRepository repository;
QuoteBloc({@required this.repository}) : assert(repository != null);
@override
QuoteState get initialState => QuoteEmpty();
@override
Stream<QuoteState> mapEventToState(QuoteEvent event) async* {
if (event is FetchQuote) {
yield QuoteLoading();
try {
final Quote quote = await repository.fetchQuote();
yield QuoteLoaded(quote: quote);
} catch (_) {
yield QuoteError();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
initialState自v5.0.0以来,属性已从flutter_bloc 中删除。这是迁移指南。
您应该改用 super() 构造函数:
class QuoteBloc extends Bloc<QuoteEvent, QuoteState> {
final QuoteRepository repository;
QuoteBloc({@required this.repository}) :
assert(this.repository != null),
super(QuoteEmpty());
...
Run Code Online (Sandbox Code Playgroud)
零参数构造函数实际上是可以用零参数调用的构造函数。这包括仅采用可选参数的构造函数。
如果派生类没有显式调用其基类构造函数,则派生类的构造函数将隐式调用基类中带有零参数的默认(未命名)构造函数。如果需要调用基类中的命名构造函数或者需要传递参数,则需要显式调用基类构造函数。
在您的情况下,QuoteBloc派生自Bloc<QuoteEvent, QuoteState>,但QuoteBloc构造函数不会显式调用来自 的任何构造函数Bloc,这显然不提供默认的零参数构造函数。
| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |