Skip to content

Instantly share code, notes, and snippets.

@DreadBoy
Created November 20, 2020 10:31
Show Gist options
  • Save DreadBoy/3bd8939c1a0414f70bf93b8a9c75b9d6 to your computer and use it in GitHub Desktop.
Save DreadBoy/3bd8939c1a0414f70bf93b8a9c75b9d6 to your computer and use it in GitHub Desktop.
How to observe changes in StateNotifier correctly
import 'package:flutter_riverpod/all.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('StateNotifier', () {
test('should have correct starting value', () {
final container = ProviderContainer();
expect(container.read(testProvider.state), 'init');
});
test('should return updated value', () {
final container = ProviderContainer();
container.read(testProvider).update();
expect(container.read(testProvider.state), 'update');
});
test('should return updated value when read incorrectly', () {
final container = ProviderContainer();
container.read(testProvider).update();
expect(container.read(testProvider).state, 'update');
});
test('shouldn\'t trigger update when read incorrectly', () {
final container = ProviderContainer();
expect(container.read(incorrectProvider), 'init');
container.read(testProvider).update();
expect(container.read(incorrectProvider), 'init');
});
test('should trigger update when read correctly', () {
final container = ProviderContainer();
expect(container.read(correctProvider), 'init');
container.read(testProvider).update();
expect(container.read(correctProvider), 'update');
});
});
}
class TestStateNotifier extends StateNotifier<String> {
TestStateNotifier() : super('init');
void update() {
this.state = 'update';
}
}
final testProvider = StateNotifierProvider((ref) => TestStateNotifier());
final incorrectProvider = Provider<String>((ref) {
return ref.watch(testProvider).state;
});
final correctProvider = Provider<String>((ref) {
return ref.watch(testProvider.state);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment