flutterriverpodriverpod-generatorriverpod-annotation

Riverpod annotation for State Provider


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


Solution

  • 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();