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

Flutter Injectable:泛型类型多实例注入的注解实现方案

解决方案

你可以通过Injectable 自定义Module的方式实现多泛型实例的注册,步骤如下:

步骤1:移除泛型类上的默认@injectable注解

// 去掉原有的@injectable注解
class TestBloc<T> {
  // 原有逻辑保持不变
}

步骤2:定义自定义注册Module

创建一个抽象类作为注册Module,添加@module注解,在内部分别声明三个不同泛型的实例提供方法:

@module
abstract class TestBlocRegisterModule {
  // 注册TestBloc<One>实例
  Factory<TestBloc<One>> provideTestBlocOne() => TestBloc<One>(/*原有传参*/);
  
  // 注册TestBloc<Two>实例
  Factory<TestBloc<Two>> provideTestBlocTwo() => TestBloc<Two>(/*原有传参*/);
  
  // 注册TestBloc<Three>实例
  Factory<TestBloc<Three>> provideTestBlocThree() => TestBloc<Three>(/*原有传参*/);
}

如果需要在注入时区分同泛型的不同实例,可以给对应提供方法添加@Named注解:

@Named("specialOneBloc")
Factory<TestBloc<One>> provideSpecialTestBlocOne() => TestBloc<One>(/*特殊传参*/);

// 注入时指定注解即可拿到对应实例
@injectable
class DemoPage {
  final TestBloc<One> bloc;
  DemoPage(@Named("specialOneBloc") this.bloc);
}

步骤3:重新运行生成命令

执行构建命令重新生成依赖配置文件:

flutter pub run build_runner build --delete-conflicting-outputs

生成后的代码会自动包含你需要的三个不同泛型参数的TestBloc注册逻辑,和之前手写的注册逻辑完全一致。

内容的提问来源于stack exchange,提问作者A.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:36:02