使用 Riverpod 时是否可以保存全局 ref 对象

Can a global ref object be saved when using Riverpod

情况如下:网络请求使用的dio有自定义的拦截器。拦截器的onResponse方法判断如果serverreturnscode==404,就会触发用户的注销操作,一些数据会随着注销操作被清除。例如:

flutter_riverpod: ^1.0.0-dev.7

RequestInterceptor.dart

class RequestInterceptor extends InterceptorsWrapper {

  @override
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    if (response.data['code'] == 404) {
      // Force users to log out
      // ref.read(userProvider).logout();
    }
    // ...
  }
}

但是如何获取 ref 对象来获取 userProvider?

你不知道。

相反,在提供程序中创建您的 RequestInterceptor 并将“ref”对象传递给它

class Example {
  Example(this.ref);
  final Ref ref;
}

final provider = Provider((ref) => Example(ref));