State Provider 的 Riverpod 注释

问题描述 投票:0回答:1

我是 Riverpod 新手。我正在使用 Riverpod Annotation 来生成提供程序。 至于Future Provider,我是这样做的。

@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);
}

这是我的国家提供者

final authStepProvider = StateProvider<AuthStep>((ref) => AuthStep.register); 

如何用注释来做?

我试过:

@riverpod
class AuthStep extends _$AuthStep {
  @override
  AuthStepModel build() {
    return AuthStepModel.register;
  }
}

但是当我尝试像这样更新其状态时:

ref.read(authStepProvider.notifier).state = AuthStepModel.login; 

它发出警告:

成员“state”只能在“package:riverpod/src/notifier.dart”子类的实例成员中使用。

另外,这是针对 StateNotifier Provider 的,我需要的是 StateProvider

flutter riverpod riverpod-generator riverpod-annotation
1个回答
0
投票

只需添加方法来改变状态:

@riverpod
class AuthStep extends _$AuthStep {
  @override
  AuthStepModel build() {
    return AuthStepModel.register;
  }
  
  void onLogIn() {
    state = AuthStepModel.login;
  }
}

并这样称呼它:

ref.read(authStepProvider.notifier).onLogIn();
© www.soinside.com 2019 - 2024. All rights reserved.