flutter - 如何修复这个 Flutter 错误:超类 'Bloc' 没有零参数构造函数
问题描述
我正在关注本教程:https ://www.youtube.com/watch?v=dc3B_mMrZ-Q&t=11033s&ab_channel=ResoCoder
不幸的是,我拥有最新版本的 FLutter,并且还安装了所有依赖项的最新版本,因此必须更改代码以进行一些重大更改。
我收到此错误:
超类 'Bloc<NumberTriviaEvent, NumberTriviaState>' 没有零参数构造函数。尝试在“Bloc<NumberTriviaEvent, NumberTriviaState>”中声明零参数构造函数,或在“Bloc<NumberTriviaEvent, NumberTriviaState>”中显式调用不同的构造函数。
这是代码的相关部分:
class NumberTriviaBloc extends Bloc<NumberTriviaEvent, NumberTriviaState> {
final GetConcreteNumberTrivia getConcreteNumberTrivia;
final GetRandomNumberTrivia getRandomNumberTrivia;
final InputConverter inputConverter;
NumberTriviaBloc({
@required GetConcreteNumberTrivia concrete,
@required GetRandomNumberTrivia random,
@required this.inputConverter,
}) : assert(concrete != null),
assert(random != null),
assert(inputConverter != null),
getConcreteNumberTrivia = concrete,
getRandomNumberTrivia = random;
NumberTriviaState get initialState => Empty();
@override
Stream<NumberTriviaState> mapEventToState(
NumberTriviaEvent event,
) async* {
if (event is GetTriviaForConcreteNumber) {
final inputEither =
inputConverter.stringToUnsignedInteger(event.numberString);
yield* inputEither.fold(
(failure) async* {
yield Error(message: INVALID_INPUT_FAILURE_MESSAGE);
},
(integer) async* {
yield Loading();
final failureOrTrivia =
await getConcreteNumberTrivia(Params(number: integer));
yield* _eitherLoadedOrerrorState(failureOrTrivia);
},
);
} else if (event is GetTriviaForRandomNumber) {
yield Loading();
final failureOrTrivia = await getRandomNumberTrivia(NoParams());
yield* _eitherLoadedOrerrorState(failureOrTrivia);
}
}
Stream<NumberTriviaState> _eitherLoadedOrerrorState(
Either<Failure, NumberTrivia> failureOrTrivia,
) async* {
yield failureOrTrivia.fold(
(failure) => Error(message: _mapFailureToMessage(failure)),
(trivia) => Loaded(trivia: trivia),
);
}
String _mapFailureToMessage(Failure failure) {
switch (failure.runtimeType) {
case ServerFailure:
return SERVER_FAILURE_MESSAGE;
case CacheFailure:
return CACHE_FAILURE_MESSAGE;
default:
return 'Unexpected error';
}
}
}
我试过像这样添加对 super in 的调用:
NumberTriviaBloc({
@required GetConcreteNumberTrivia concrete,
@required GetRandomNumberTrivia random,
@required this.inputConverter,
}) : assert(concrete != null),
assert(random != null),
assert(inputConverter != null),
getConcreteNumberTrivia = concrete,
getRandomNumberTrivia = random,
super(Empty());
这修复了编译错误,但我不知道应该将什么传递给超级调用。
我对 Flutter 和 Dart 非常陌生(因为这是我第一次深入研究它们)。
感谢您能给我的任何见解。
解决方案
我不知道你用的是什么flutter bloc。
从 v5.0.0 开始设置初始状态有一个变化。
https://bloclibrary.dev/#/migration?id=%E2%9D%97initialstate-has-been-removed
所以你需要在超级构造函数中传递初始状态。
推荐阅读
- docker - 将容器存储在路径中
- javascript - 使用 Cloud Function 在 Firestore 上写入数据突然失败
- c - Apple Hypervisor 在 MacOS Big Sur beta 11.0.1 上完全崩溃
- file - Typo3 Powermail 文件上传 上传前调整文件大小
- c++ - Robocopy - 如果我在它完成之前停止它会产生损坏的文件吗?
- sql - 检查字符串是否存在子字符串
- python - 如何检查 3 列是否相同,如果值相同,如何添加一个新列?
- r - 如何使用闪亮在交互式 html 报告中显示两个数据输出
- javascript - 电子:NodeJS 'net' 模块返回空对象
- r - 为什么随机效应估计器不正确