0

状態管理に Riverpod を使用しています。

class SignInStateNotifier extends StateNotifier<SignInFormStates> {
  SignInStateNotifier(this._authFacade) : super(SignInFormStates.initial());

  final IAuthFacade _authFacade;

  void mapEventToState(SignInFormEvents signInFormEvents) {
    state = signInFormEvents.when(
        emailChanged: (value) => state.copyWith(
              emailAddress: EmailAddress(value),
              authFailureOrSuccess: none(),
            ),
        passwordChanged: (value) => state.copyWith(
              password: Password(value),
              authFailureOrSuccess: none(),
            ),
        signInWithEmailAndPasswordPressed: () async* {
          yield* _performActionOnAuthFacade(
              _authFacade.signInWithEmailAndPassword);
        });
  }

ここでエラーが発生します

signInWithEmailAndPasswordPressed: () async* {
              yield* _performActionOnAuthFacade(
                  _authFacade.signInWithEmailAndPassword);
            });

引数の型 'Stream Function()' をパラメーターの型 'SignInFormStates Function()' に割り当てることはできません。

私の__performActionOnAuthFacade機能

Stream<SignInFormStates> _performActionOnAuthFacade(
    Future<Either<AuthFailure, Unit>> Function({
      @required EmailAddress emailAddress,
      @required Password password,
    })
        forwardCall,
  ) async* {
    Either<AuthFailure, Unit> failureOrSuccess;
    if (state.emailAddress.isValid() && state.password.isValid()) {
      yield state.copyWith(
        isSubmitting: true,
        authFailureOrSuccess: none(),
      );
      failureOrSuccess = await _authFacade.registerWithEmailAndPassword(
          emailAddress: state.emailAddress, password: state.password);
    }
    yield state.copyWith(
        isSubmitting: false,
        showErrorMessage: true,
        authFailureOrSuccess: optionOf(failureOrSuccess));
  }

このエラーを解決する解決策を教えてください。前もって感謝します。

4

2 に答える 2

0

私はあなたのSignInFormStatesクラスを知りませんsignInWithEmailAndPasswordPressedが、ストリーム関数を呼び出すことを期待していませんが、おそらく空の voidCallback ですか?

state = signInFormEvents.when(
        emailChanged: (value) => state.copyWith(
              emailAddress: EmailAddress(value),
              authFailureOrSuccess: none(),
            ),
        passwordChanged: (value) => state.copyWith(
              password: Password(value),
              authFailureOrSuccess: none(),
            ),
        signInWithEmailAndPasswordPressed: () => () async* {  //so a SignInFormStates Function() calls your stream function
          yield* _performActionOnAuthFacade(
              _authFacade.signInWithEmailAndPassword);
        });

しかし、その後、状態がタイプであると予想され、それにストリーム関数を渡すことを伝える他のエラーが発生する可能性がSignInFormStatesあります。または、実際にはストリームが終了して新しい状態が返されるのを待っている可能性があります。やるべきことは、何が起こるか試してみることです

于 2021-01-23T18:30:01.650 に答える