You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter购物车Bloc初始化报错适配新版flutter_bloc库修复

修复flutter_bloc新版事件未注册错误

新版flutter_bloc(v8及以上版本)已弃用mapEventToState方法,改为通过on<Event>语法注册事件处理器,你的代码仍使用旧写法,导致事件找不到对应处理逻辑,触发报错。

修改后的完整代码如下:

import 'dart:async';
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:shop_cart/model/shop.dart';
import 'package:shop_cart/repository/shop_data_repository.dart';

part 'shop_event.dart';
part 'shop_state.dart';

class ShopBloc extends Bloc<ShopEvent, ShopState> {
  final ShopDataProvider shopDataProvider = ShopDataProvider();

  ShopBloc() : super(ShopInitial()) {
    // 注册所有事件处理器
    on<ShopPageInitializedEvent>(_onShopPageInitialized);
    on<ItemAddingCartEvent>(_onItemAddingCart);
    on<ItemAddedCartEvent>(_onItemAddedCart);
    on<ItemDeleteCartEvent>(_onItemDeleteCart);

    // 触发初始化事件
    add(ShopPageInitializedEvent());
  }

  // 处理页面初始化事件
  Future<void> _onShopPageInitialized(
    ShopPageInitializedEvent event,
    Emitter<ShopState> emit,
  ) async {
    final shopData = await shopDataProvider.getShopItems();
    final cartData = await shopDataProvider.geCartItems();
    emit(ShopPageLoadedState(shopData: shopData, cartData: cartData));
  }

  // 处理添加商品到购物车中事件
  Future<void> _onItemAddingCart(
    ItemAddingCartEvent event,
    Emitter<ShopState> emit,
  ) async {
    final cartData = await shopDataProvider.geCartItems();
    emit(ItemAddingCartState(cartItems: event.cartItems, cartData: cartData));
  }

  // 处理商品已添加到购物车事件
  void _onItemAddedCart(
    ItemAddedCartEvent event,
    Emitter<ShopState> emit,
  ) {
    emit(ItemAddedCartState(cartItems: event.cartItems));
  }

  // 处理删除购物车商品事件
  void _onItemDeleteCart(
    ItemDeleteCartEvent event,
    Emitter<ShopState> emit,
  ) {
    emit(ItemDeletingCartState(cartItems: event.cartItems));
  }
}

关键修改点:

  • 移除mapEventToState重写方法,改用on<Event>在构造函数中注册事件处理器
  • 将每个事件的处理逻辑拆分为独立私有方法,使用Emitter<ShopState>替代yield发送状态
  • 确保事件处理器注册完成后再触发初始化事件

内容的提问来源于stack exchange,提问作者Pulkit Aggarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:32:38