我正在寻找一种方法将两个提供程序(都发出相同类型的值)组合成一个,以便生成的提供程序发出由两个输入提供程序之一发出的最新值。
示例:
import 'package:riverpod/riverpod.dart';
// Example StateNotifier for a simple counter.
class Counter extends StateNotifier<int> {
Counter() : super(0);
void increment() {
state++;
}
}
// Create multiple providers of the same type.
final counterProvider1 = StateNotifierProvider<Counter, int>((ref) => Counter());
final counterProvider2 = StateNotifierProvider<Counter, int>((ref) => Counter());
// Create a provider that combines the latest values.
final mergeCounterProvider = Provider<int>((ref) {
final counter1 = ref.watch(counterProvider1);
final counter2 = ref.watch(counterProvider2);
// TODO return the latest value
return ???;
});
mergeCounterProvider
需要更新并发出最新更新的计数器的值。
使用
ref.listen for both
,在构建/创建中进行设置,并将更新的值推送到 ref.state
。它将自动成为两个流中最新的一个
final mergeCounterProvider = Provider<int?>((ref) {
ref
..listen(counterProvider1, (_, value) {
ref.state = value;
})
..listen(counterProvider2, (_, value) {
ref.state = value;
});
return null;
});