如何使用新的 Riverpod 语法将依赖项传递给 AsyncNotifier?

问题描述 投票:0回答:1

我目前正在使用新的 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.

flutter flutter-dependencies riverpod riverpod-annotation
1个回答
0
投票

在 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 ...
}
© www.soinside.com 2019 - 2024. All rights reserved.