0

Flutterアプリケーションに Hexagonal Architecture を実装しています。認証のために、後で認証リポジトリに継承されるインターフェースを作成しました。

2 つの関数は一般的なパラメーターを使用します。1 つは認証サービス (この場合は Amplify Cognito) まで変更できるソーシャル サインアップ用で、もう 1 つは変更可能なユーザー属性 (サービスまで) を受け取ります。

abstract class AuthRepository {
  Future<List<T>> fetchUserAttributes<T>();
  Future<bool> signInWithSocialWebUI<T>({required T provider});
}

まあ、リポジトリでそれらをオーバーライドすることは問題ではありませんが、コードレベルで厄介なエラーが発生しています: ここに画像の説明を入力

ご覧のとおり、型は*で異なります (これはC++のポインターを意味するため、理解できません): The argument type 'AuthProvider' can't be assigned to the parameter type 'AuthProvider*'.dartargument_type_not_assignable.

この場合、次のエラーが表示されます。

@override
  Future<bool> signInWithSocialWebUI<AuthProvider>(
      {required AuthProvider provider}) async {
    try {
      SignInResult result =
          await _authCategory.signInWithWebUI(provider: provider);
      return result.isSignedIn;
    } on AmplifyException catch (error) {
      // TODO: Catch error for analytics, not required for frontend.
      return false;
    }
  }

それ以外の場合は、次のようになります A value of type 'List<AuthUserAttribute*>*' can't be assigned to a variable of type 'List<AuthUserAttribute>'. Try changing the type of the variable, or casting the right-hand type to 'List<AuthUserAttribute>'.dartinvalid_assignment

コードは次のとおりです。

  @override
  Future<List<AuthUserAttribute>>
      fetchUserAttributes<AuthUserAttribute>() async {
    try {
      List<AuthUserAttribute> result =
          await _authCategory.fetchUserAttributes();
      return result;
    } on AmplifyException catch (error) {
      // TODO: Catch error for analytics, not required for frontend.

    }
  }

両方の場合の共通点は、これらの関数を定義したジェネリック型です。

この問題は、ジェネリックを使用するときにのみ発生します。他の場合は発生しません。ソーシャル認証プロバイダーのタイプを変更したいFirebaseプロバイダーに変更する場合、原因に影響します。

この不一致の問題を解決するにはどうすればよいですか?

どうもありがとうございました。

4

0 に答える 0