Dart中class ClassName<int>{}含义及Bloc底层使用<MyEvent, MyState>的原理
问题1:Dart中
class ClassName<int>{}的含义 这是Dart的泛型类定义,但属于容易造成歧义的写法:
<int>是泛型类型参数的名称,这里直接复用了内置的int类型名,虽然语法合法,但会混淆内置类型和泛型参数,实际开发中强烈不推荐。- 常规泛型类写法会用
T/E这类无歧义的标识符作为参数名,比如class ClassName<T>{}。 - 在这个类内部,
int指代的是泛型参数而非内置整数类型,比如:
class ClassName<int>{ int value; // 此处的int是泛型参数,不是整数类型 ClassName(this.value); }
问题2:Bloc框架底层如何使用
<MyEvent, MyState> <MyEvent, MyState>是Bloc基类的泛型约束,底层核心作用如下:
- 编译期类型安全
限定当前Bloc只能接收MyEvent及其子类的事件,只能输出MyState及其子类的状态,提前拦截类型不匹配的错误。 - 事件流的边界控制
Bloc内部维护事件队列与处理流,<MyEvent>指定了事件流中传递数据的类型,确保只有符合类型的事件能进入处理流程。 - 状态流的输出约束
<MyState>定义了Bloc对外暴露的状态流类型,emit方法只能发送该类型的状态,UI层监听时能明确接收的状态类型。 - 事件处理器的匹配逻辑
on<EventA>这类绑定方法依赖泛型约束:EventA必须是MyEvent的子类才能通过编译。底层会根据事件类型匹配对应的处理器,确保事件与状态更新逻辑的对应关系。 - 通用逻辑的复用
基类Bloc<Event, State>封装了事件循环、状态分发等通用逻辑,通过泛型参数将具体的事件/状态类型注入,让子类MyBloc无需重复实现底层流管理逻辑。
内容的提问来源于stack exchange,提问作者Chinmoy kr
相关产品推荐
相关产品推荐

