我目前正在使用新的 Riverpod 语法,但遇到错误并且无法找到解决方案。我需要传递依赖项,但它给了我这个错误类 TaskHomeInit 必须有一个默认构造函数。有谁知道将 HomeRepository 依赖项传递给它的另一种方法。当我不放置构造函数时,错误是它需要初始化。
@Riverpod(keepAlive: true)
class TaskHomeInit extends _$TaskHomeInit {
final HomeRepository homeRepository;
// Constructor
TaskHomeInit({required this.homeRepository}); // here is error
@override
Future<TasksHomeState> build() async {
final List<TaskHome> taskHome = await homeRepository.getTaskHome();
return TasksHomeState(isLoading: false, tasksHome: taskHome);
}
}
当我不创建构造函数时,我收到此错误:
The final variable 'homeRepository' must be initialized. Try initializing the variable.
在 Riverpod 世界中,依赖注入通常是通过
Ref
对象完成的。
创建一个提供程序,而不是通过构造函数注入依赖项。
@Riverpod(keepAlive: true)
HomeRepository homeRepo(HomeRepoRef ref) => HomeRepository();
在
Notifier/AsyncNotifier
的构建方法中,使用 ref.watch
访问依赖项。这是安全的,建议在构建方法中使用ref.watch
。
@override
Future<TasksHomeState> build() async {
final repo = ref.watch(homeRepoProvider);
final taskHome = await repo.getTaskHome();
return ...
}