Riverpod StreamProvider内部能否读取自身的上一个值?
在Riverpod的StreamProvider内部读取自身上一个值的方法
直接在StreamProvider的创建逻辑里没法直接获取自身输出的上一个值,不过可以通过两种方案实现需求:
用StateProvider缓存历史值
额外声明一个StateProvider来存储流的上一个值,在StreamProvider里先读取这个缓存值,再在流发射新数据时更新缓存。示例代码:final previousValueProvider = StateProvider<String?>((ref) => null); final myStreamProvider = StreamProvider<String>((ref) { // 读取上一个缓存值 final previousValue = ref.watch(previousValueProvider); return myStream().map((newValue) { // 更新缓存为当前新值 ref.read(previousValueProvider.notifier).state = newValue; return newValue; }); });自定义StreamTransformer包装流
写一个自定义的StreamTransformer,在内部自动缓存上一个值,让流每次发射包含「上一个值+当前值」的元组,这样StreamProvider就能直接拿到前后值。示例代码:class WithPreviousTransformer<T> extends StreamTransformerBase<T, (T?, T)> { @override Stream<(T?, T)> bind(Stream<T> stream) { T? previous; return stream.map((value) { final result = (previous, value); previous = value; return result; }); } } final myStreamProvider = StreamProvider<(String?, String)>((ref) { return myStream().transform(WithPreviousTransformer()); });
内容的提问来源于stack exchange,提问作者Dan Horton
相关产品推荐
相关产品推荐

