问题描述
我们正在Flutter 应用程序中实施六边形架构。对于身份验证,我们创建了一个接口,稍后将被身份验证存储库继承。
两个函数使用通用参数:一个用于社交注册,可以更改到身份验证服务(在我们的例子中,Amplify Cognito),另一个接收可以更改的用户属性(再次,取决于服务) .
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 提供程序,我想更改社交身份验证提供程序类型,这会影响原因。
我该如何解决这个错配问题?
非常感谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)