如何在Riverpod中监听ProviderContainer的变更?
纯Dart环境下Riverpod依赖变更监听实现方案
你当前使用的是Riverpod的ProviderContainer API,监听依赖变更不需要引入Flutter相关组件,直接使用容器自带的listen方法即可实现。
基础监听代码示例
final container = ProviderContainer(); // 监听指定provider的状态变化 container.listen<MyDependencyType>( myDependencyProvider, // 状态变更触发的回调:previous为变更前的值,next为变更后的值 (previous, next) { print('依赖更新:旧值=$previous 新值=$next'); // 此处编写变更后的业务处理逻辑 }, // 可选参数:设为true时首次监听会立即触发一次回调,传入当前状态值 fireImmediately: false, );
取消监听的方法
listen方法会返回ProviderSubscription类型的订阅对象,不需要继续监听时调用其close方法释放资源即可:
// 保存订阅对象 final depSubscription = container.listen(myDependencyProvider, (prev, next) {}); // 后续不需要监听时执行关闭 depSubscription.close();
注意事项
read方法仅会读取当前的状态快照,不会建立长期监听关系,无法感知后续的状态变更- 如果监听的是
FutureProvider/StreamProvider这类异步provider,需要对应处理AsyncValue的loading、error、data三种状态 ProviderContainer实例销毁前建议手动关闭所有未取消的订阅,避免多余内存占用
内容的提问来源于stack exchange,提问作者robotoaster
相关产品推荐
相关产品推荐

