I am new to Riverpod. I am using Riverpod Annotation to generate providers. As for Future Provider, I did it like this.
@riverpod
Future<void> login(LoginRef ref) async {
final login = sl<LoginUsecase>();
final saveAuth = sl<SaveAuthUsecase>();
final loginForm = ref.read(loginFormProvider);
final input = LoginUsecaseInput(
password: loginForm.password!,
email: loginForm.email!,
);
final output = await login(input);
final saveAuthInput = SaveAuthUsecaseInput(bearerToken: output.bearerToken);
await saveAuth(saveAuthInput);
}
This is my State Provider
final authStepProvider = StateProvider<AuthStep>((ref) => AuthStep.register);
How to do it with annotations?
I tried:
@riverpod
class AuthStep extends _$AuthStep {
@override
AuthStepModel build() {
return AuthStepModel.register;
}
}
But when I try to update its state like this:
ref.read(authStepProvider.notifier).state = AuthStepModel.login;
It gives a warning:
The member 'state' can only be used within instance members of subclasses of 'package:riverpod/src/notifier.dart'.
Also, this is for StateNotifier Provider & what I need is StateProvider
just add method to mutate state:
@riverpod
class AuthStep extends _$AuthStep {
@override
AuthStepModel build() {
return AuthStepModel.register;
}
void onLogIn() {
state = AuthStepModel.login;
}
}
and call it like this:
ref.read(authStepProvider.notifier).onLogIn();