日安,我的代码如下所示:

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),
    );
  }
}

我收到了这个错误: Unhandled Exception: Bad state: add(CheckIfFavoriteMovieEvent) was called without a registered event handler. Make sure to register a handler via on((event, emit) {...})

如果你能帮助我解决我写的这个错误,我将不胜感激.非常感谢现在帮助我们的每一个人

我用了很多人工智能工具来解决这个问题,但它没有给我想要的解决方案.

推荐答案

您的代码应该如下所示:

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),
    ));
  }
}

Flutter相关问答推荐

如何在容器中移动图标按钮?

Riverpod状态管理-在调用请求时更新用户界面

audioQuery不会等待判断存储权限

如何实现Flutter 梳理机图像的小量移动

GitHub Actions工作流secret中的特殊字符未被保留

在 flutter 吧蜂巢中拯救主题

Flutter守护进程无法启动

抖动问题:检测到0个或2个或更多具有相同值的[DropdownMenuItem]

Flutter - Riverpod 2.0 - 如何访问 onDispose 回调?

如何给按钮的边框半径?

当键盘隐藏表单时该怎么办?

点击后,将按钮的 colored颜色 禁用/更改一段时间

Flutter canvas 绘制不同 colored颜色 的原始点

Flutter - 如何将按钮对齐到行的右侧

java.lang.IncompatibleClassChangeError:找到接口 com.google.android.gms.location.SettingsClient,

在 Flame Forge2d 中射击子弹

为什么 Flutter riverpod 直接分配不起作用但方法可以

我的主屏幕上的 FutureBuilder 不断重新加载(但仅在其他屏幕上时)?

在 Flutter 中单击时切换按钮 colored颜色 没有改变

Flutter Firebase 可以在真实设备上运行,而不是在 Android 模拟器上运行