我是 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
只需添加方法来改变状态:
@riverpod
class AuthStep extends _$AuthStep {
@override
AuthStepModel build() {
return AuthStepModel.register;
}
void onLogIn() {
state = AuthStepModel.login;
}
}
并这样称呼它:
ref.read(authStepProvider.notifier).onLogIn();