Flutter使用injectable注解抽象类运行build_runner报错遗漏什么配置?
报错原因
你直接给无法实例化的抽象类TodoRepository添加了@injectable注解,injectable默认会尝试直接实例化你标记了该注解的类来完成依赖注册,抽象类无法被直接实例化,因此触发了这个报错。
正确配置步骤
- 第一步:移除抽象类上的
@injectable注解,代码修改为如下形式:
abstract class TodoRepository { Future<Either<Failure, DayTodosEntity>> getDayDodo(DateEntity date); }
- 第二步:编写该抽象类的具体实现类,给实现类添加
@Injectable注解,同时通过as参数将实现类绑定到对应的抽象父类:
@Injectable(as: TodoRepository) class TodoRepositoryImpl implements TodoRepository { @override Future<Either<Failure, DayTodosEntity>> getDayDodo(DateEntity date) { // 此处写对应业务逻辑实现 } }
- 如果你不想通过实现类直接绑定,也可以通过
@factoryMethod注解来提供抽象类的实例:
@module abstract class RegisterModule { @factoryMethod TodoRepository getTodoRepository() => TodoRepositoryImpl(); }
- 配置完成后重新执行
flutter pub run build_runner build即可正常构建。
内容的提问来源于stack exchange,提问作者reza
相关产品推荐
相关产品推荐

