Amazon web services 为什么在暂停执行时无法访问似乎在范围内的对象?

Amazon web services 为什么在暂停执行时无法访问似乎在范围内的对象?,amazon-web-services,flutter,dart,Amazon Web Services,Flutter,Dart,我正在学习飞镖和颤振,我发现这是一次非常愉快的经历。我正在制作一个我想与亚马逊AWS资源交流的应用程序。然而,我遇到了一个我已经有一段时间没能解决的问题 我正在制作一个函数,用于获取向AWS的API发出经过身份验证的请求所需的密钥和令牌。我正在使用AWS Amplify中的库函数来获取AuthSession对象。如果在检索AuthSession对象之后将断点设置为,则该对象似乎包含名为AuthSession.credentials的对象。这又包含awsAccessKey、awsSecretKey

我正在学习飞镖和颤振,我发现这是一次非常愉快的经历。我正在制作一个我想与亚马逊AWS资源交流的应用程序。然而,我遇到了一个我已经有一段时间没能解决的问题

我正在制作一个函数,用于获取向AWS的API发出经过身份验证的请求所需的密钥和令牌。我正在使用AWS Amplify中的库函数来获取AuthSession对象。如果在检索AuthSession对象之后将断点设置为,则该对象似乎包含名为AuthSession.credentials的对象。这又包含awsAccessKey、awsSecretKey和sessionToken,它们是我需要的令牌和密钥。当执行暂停时,我可以在调试控制台中访问它们

Future<AWSCredentials> getAWSCredentials() async {
  final AuthSession authSession = await Amplify.Auth.fetchAuthSession(
    options: CognitoSessionOptions(getAWSCredentials: true));
  final a = 1; // I set a breakpoint on this line
  //final AWSCredentials awsCredentials = authSession.credentials;
  //return awsCredentials;
}
未来

但是,如果我试图让函数返回这个AuthSession(通过取消对上述函数最后两行的注释),或者直接返回其中一个标记,那么它将不再编译,并且会收到错误消息

未为类型“AuthSession”定义获取程序“凭据”。 尝试导入定义“凭据”的库,将名称更正为现有getter的名称,或定义名为“凭据”的getter或字段。省道(未定义的获取器)


我试图深入研究定义类AuthSession的代码,但它似乎不包含对credentials对象的任何引用。然而,它显然在运行时就在那里。为什么我不能访问它?

AuthSession
不包含任何名为
凭据的成员,因此当将
fetchAuthSession()
的结果强制转换到
AuthSession
时,无法访问该成员。但是,子类
CognitoAuthSession
确实包含
凭证
成员,因此将结果强制转换为该类型允许访问
authSession.credentials

因此对
fetchAuthSession()
的调用应该是

final CognitoAuthSession authSession = await Amplify.Auth.fetchAuthSession(
        options: CognitoSessionOptions(getAWSCredentials: true));

然而,我还没有弄明白,
fetchAuthSession
如何返回
CognitoAuthSession
而不是
AuthSession
——当我右键单击VS代码中的函数并单击Go to Definition时,它看起来是这样的:
Future