What I did (to present loading state example) is: @freezed abstract class CounterState with _$CounterState { const factory CounterState.initial([@Default(0) int value]) = _Initial; const factory CounterState.loading(int value) = _Loading; const factory CounterState.current(int value) = _Current; } class CounterStateNotifier extends StateNotifier<CounterState> with LocatorMixin { CounterStateNotifier() : super(CounterState.initial()); void increment() { state = CounterState.loading(state.value); Timer( Duration(seconds: 1), () => state = CounterState.current(state.value + 1), ); } } StateNotifierBuilder( stateNotifier: context.watch<CounterStateNotifier>(), builder: (context, CounterState state, _) => state.when( initial: (value) => Text( '$value', style: Theme.of(context).textTheme.headline4, ), loading: (_) => CircularProgressIndicator(), current: (value) => Text( '$value', style: Theme.of(context).textTheme.headline4, ), ), ) But that is obviously 'hack'. Any tip? Remi Rousselet / Ryan Edge