【问题标题】:Undefined class 'Reader' in Riverpod 2.0.2Riverpod 2.0.2 中未定义的类 \'Reader\'
【发布时间】:2023-02-22 14:50:20
【问题描述】:

为了访问非小部件类中的提供程序,我使用了 Reader 函数。更新Riverpod依赖到^2.0.2版本后,Reader功能好像没有了。你建议什么解决方法?

我应该将 Ref 或 WidgetRef 作为参数传递给类构造函数吗?

当我传递 WidgetRef 时,它无法识别状态和方法。

【问题讨论】:

    标签: flutter flutter-riverpod


    【解决方案1】:

    这是 Riverpod 2 中的一个突破性变化。

    您应该将 ref 作为参数传递,并在您之前使用 reader 的地方使用 ref.read 。

    例子:

    final userTokenProvider = StateProvider<String>((ref) => null);
    
    final repositoryProvider = Provider(Repository.new);
    
    class Repository {
      Repository(this.ref);
    
      final Ref ref;
    
      Future<Catalog> fetchCatalog() async {
        String token = ref.read(userTokenProvider);
    
        final response = await dio.get('/path', queryParameters: {
          'token': token,
        });
    
        return Catalog.fromJson(response.data);
      }
    }
    

    https://riverpod.dev/docs/concepts/combining_providers/#can-i-read-a-provider-without-listening-to-it

    【讨论】:

      【解决方案2】:

      您还可以定义一个自定义的“Reader”,但不推荐这样做。不过,当你想逐步迁移到新版本的 Riverpod 2.0 时,它可能会派上用场

      typedef Reader = T Function<T>(ProviderBase<T> provider);
      

      【讨论】:

        猜你喜欢
        • 2021-10-14
        • 2021-10-17
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多