dart 确保通过on< CheckIfFavoriteMovieEvent>((event,emit){...})error注册处理程序

ca1c2owp  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(33)

你好,我的代码如下:

class FavoriteBloc extends Bloc<FavoriteEvent, FavoriteState> {
  final SaveMovie saveMovie;
  final GetFavoriteMovies getFavoriteMovies;
  final DeleteFavoriteMovie deleteFavoriteMovie;
  final CheckIfFavoriteMovie checkIfFavoriteMovie;

  FavoriteBloc({
    required this.saveMovie,
    required this.getFavoriteMovies,
    required this.deleteFavoriteMovie,
    required this.checkIfFavoriteMovie,
  }) : super(FavoriteInitial());

  @override
  Stream<FavoriteState> mapEventToState(
      FavoriteEvent event,
      ) async* {
    if (event is ToggleFavoriteMovieEvent) {
      if (event.isFavorite) {
        await deleteFavoriteMovie(MovieParams(event.movieEntity.id));
      } else {
        await saveMovie(event.movieEntity);
      }
      final response =
      await checkIfFavoriteMovie(MovieParams(event.movieEntity.id));
      yield response.fold(
            (l) => FavoriteMoviesError(),
            (r) => IsFavoriteMovie(r),
      );
    } else if (event is LoadFavoriteMovieEvent) {
      yield* _fetchLoadFavoriteMovies();
    } else if (event is DeleteFavoriteMovieEvent) {
      await deleteFavoriteMovie(MovieParams(event.movieId));
      yield* _fetchLoadFavoriteMovies();
    } else if (event is CheckIfFavoriteMovieEvent) {
      final response = await checkIfFavoriteMovie(MovieParams(event.movieId));
      yield response.fold(
            (l) => FavoriteMoviesError(),
            (r) => IsFavoriteMovie(r),
      );
    }
  }

  Stream<FavoriteState> _fetchLoadFavoriteMovies() async* {
    final Either<AppError, List<MovieEntity>> response =
    await getFavoriteMovies(NoParams());

    yield response.fold(
          (l) => FavoriteMoviesError(),
          (r) => FavoriteMoviesLoaded(r),
    );
  }
}

字符串
我收到这个错误:未处理的异常:不良状态:add(CheckIfFavoriteMovieEvent)在没有注册事件处理程序的情况下被调用。请确保通过on((event,emit){...})注册处理程序
如果你能帮助我解决我写的这个错误,我将非常感激。非常感谢现在帮助我的每一个人
我使用了许多人工智能工具来解决问题,但它并没有给予我想要的解决方案。

xlpyo6sf

xlpyo6sf1#

你的代码应该看起来像这样:

class FavoriteBloc extends Bloc<FavoriteEvent, FavoriteState> {
  final SaveMovie saveMovie;
  final GetFavoriteMovies getFavoriteMovies;
  final DeleteFavoriteMovie deleteFavoriteMovie;
  final CheckIfFavoriteMovie checkIfFavoriteMovie;

  FavoriteBloc({
    required this.saveMovie,
    required this.getFavoriteMovies,
    required this.deleteFavoriteMovie,
    required this.checkIfFavoriteMovie,
  }) : super(FavoriteInitial()) {
    on<FavoriteEvent>((event, emit) async {
      if (event is ToggleFavoriteMovieEvent) {
        if (event.isFavorite) {
          await deleteFavoriteMovie(MovieParams(event.movieEntity.id));
        } else {
          await saveMovie(event.movieEntity);
        }
        final response =
            await checkIfFavoriteMovie(MovieParams(event.movieEntity.id));

        emit(response.fold(
          (l) => FavoriteMoviesError(),
          (r) => IsFavoriteMovie(r),
        ));
      } else if (event is LoadFavoriteMovieEvent) {
        _fetchLoadFavoriteMovies(emit);
      } else if (event is DeleteFavoriteMovieEvent) {
        await deleteFavoriteMovie(MovieParams(event.movieId));
        _fetchLoadFavoriteMovies(emit);
      } else if (event is CheckIfFavoriteMovieEvent) {
        final response = await checkIfFavoriteMovie(MovieParams(event.movieId));

        emit(response.fold(
          (l) => FavoriteMoviesError(),
          (r) => IsFavoriteMovie(r),
        ));
      }
    });
  }

  void _fetchLoadFavoriteMovies(Emitter emit) async {
    final Either<AppError, List<MovieEntity>> response =
        await getFavoriteMovies(NoParams());

    emit(response.fold(
      (l) => FavoriteMoviesError(),
      (r) => FavoriteMoviesLoaded(r),
    ));
  }
}

字符串

相关问题