【发布时间】:2021-08-01 20:56:07
【问题描述】:
我正在关注本教程:https://www.youtube.com/watch?v=dc3B_mMrZ-Q&t=11033s&ab_channel=ResoCoder
不幸的是,我拥有最新版本的 FLutter,并且还安装了所有依赖项的最新版本,因此必须更改代码以进行一些重大更改。
我收到此错误:
超类 'Bloc
这是代码的相关部分:
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 非常陌生(因为这是我第一次深入了解它们)。
感谢您提供的任何见解。
【问题讨论】: