Skip to content

Instantly share code, notes, and snippets.

@gruvw
Created September 13, 2024 06:31
Show Gist options
  • Save gruvw/87a704475672f256810c590cac9be93f to your computer and use it in GitHub Desktop.
Save gruvw/87a704475672f256810c590cac9be93f to your computer and use it in GitHub Desktop.
Dart Riverpod: merging two providers of the same type to emit the latest value
import 'package:riverpod/riverpod.dart';
/// Dart Riverpod merging two providers of the same type
/// https://stackoverflow.com/questions/78978863/dart-riverpod-merging-two-providers-of-the-same-type
// Example StateNotifier for a simple counter.
class Counter extends Notifier<int> {
@override
int build() => 0;
void increment() => state++;
}
// Create multiple providers of the same type.
final counterProvider1 = NotifierProvider<Counter, int>(Counter.new);
final counterProvider2 = NotifierProvider<Counter, int>(Counter.new);
// Create a provider that combines the latest values.
final mergeCounterProvider = Provider<int>((ref) {
final sub = ref.listen(counterProvider1, (_, value) => ref.state = value);
ref.listen(counterProvider2, (_, value) => ref.state = value);
return sub.read();
});
void main() {
final container = ProviderContainer();
print(container.read(mergeCounterProvider)); // 0
container.read(counterProvider1.notifier).increment();
container.read(counterProvider1.notifier).increment();
print(container.read(mergeCounterProvider)); // 2
container.read(counterProvider2.notifier).increment();
print(container.read(mergeCounterProvider)); // 1
}
@gruvw
Copy link
Author

gruvw commented Sep 13, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment