Flutter Riverpod - .autoDispose - 参数类型“AutoDisposeProvider”无法分配给参数类型“AlwaysAliveProviderBase”

use*_*856 4 dart flutter riverpod

根据文档,当我收到此错误时,我应该将两者标记Providers.autoDispose

参数类型“AutoDisposeProvider”无法分配给参数类型“AlwaysAliveProviderBase”

为什么我在这个简约的示例中仍然收到错误?

final a = FutureProvider.autoDispose<List<String>>((ref) {
  return Future.value(["test"]);
});

final b = FutureProvider.autoDispose<List<String>>((ref) {
  return ref.watch(a);
});
Run Code Online (Sandbox Code Playgroud)

Eri*_*ero 10

发生此错误的原因是您尝试在未标记为 .autoDispose 的提供程序中侦听标记为 .autoDispose 的提供程序。

final firstProvider = Provider.autoDispose((ref) => 0);

final secondProvider = Provider((ref) {
  // The argument type 'AutoDisposeProvider<int>' can't be assigned to the
  // parameter type 'AlwaysAliveProviderBase<Object, Null>'
  ref.watch(firstProvider);
});
Run Code Online (Sandbox Code Playgroud)

解决方案是使用 .autoDispose 标记 secondaryProvider。

final firstProvider = Provider.autoDispose((ref) => 0);

final secondProvider = Provider.autoDispose((ref) {
  ref.watch(firstProvider);
});
Run Code Online (Sandbox Code Playgroud)

我只是从页面底部的 Riverpod 官方文档中复制解决方案: https://riverpod.dev/docs/concepts/modifiers/auto_dispose/