flutter - 使用 Future 函数如何正确处理泛型参数?
问题描述
我们正在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提供程序,它会影响原因,我想更改社交身份验证提供程序类型。
我该如何解决这个不匹配的问题?
非常感谢。
解决方案
推荐阅读
- javascript - js如何高效编写多个if?
- rdlc - 在 webapi 项目中将 rdlc 作为附件发送为 pdf
- c# - 如何存储窗口大小、边距和文本框的值 C# WF
- azure - ImagePullBackOff 错误退避 github 包 azure aks
- swift - 使用 PDFKit:如何进行分页符?
- ffmpeg - FFmpeg 在不将其绑定到特定时间段的情况下获得作物
- reactjs - 处理状态必须由道具控制的反应受控组件的最佳实践
- c - Arduino计算角度精度问题?
- python - Flask 无法验证受保护路由的 JWT 签名
- sql - 当字符串包含下划线时,LIKE 运算符和 % 通配符