【发布时间】:2021-10-16 03:33:42
【问题描述】:
我正在尝试从this demo 为我的 Flutter 应用程序设置 Auth0,但我遇到了这个问题。我只使用 Flutter 一段时间,我修复了一些错误,但无法修复这个错误。我在这里检查了其他答案,并尝试了文档。错误信息是;
The operator [] isn't defined for 'Future<Map<String,Object>> Function(String)'
这是有错误的方法;
Future<void> loginAction() async {
setState(() {
isBusy = true;
errorMessage = '';
});
try {
final AuthorizationTokenResponse? result =
await appAuth.authorizeAndExchangeCode(
AuthorizationTokenRequest(
AUTH0_CLIENT_ID,
AUTH0_REDIRECT_URI,
issuer: 'https://$AUTH0_DOMAIN',
scopes: ['openid', 'profile', 'offline_access'],
promptValues: ['login']
),
);
Map<String, Object> parseIdToken(String idToken) {
final parts = idToken.split(r'.');
assert(parts.length == 3);
return jsonDecode(
utf8.decode(base64Url.decode(base64Url.normalize(parts[1]))));
}
Future<Map<String, Object>> getUserDetails(String accessToken) async {
final url = 'https://$AUTH0_DOMAIN/userinfo';
final response = await http.get(Uri.parse(
url,
));
if (response.statusCode == 200) {
return jsonDecode(response.body);
} else {
throw Exception('Failed to get user details');
}
}
await secureStorage.write(
key: 'refresh_token', value: result!.refreshToken);
setState(() {
isBusy = false;
isLoggedIn = true;
name = parseIdToken['name'];
picture = getUserDetails['picture'];
});
} catch (e, s) {
print('login error: $e - stack: $s');
setState(() {
isBusy = false;
isLoggedIn = false;
errorMessage = e.toString();
});
}
}
而且出错的行是;
name = parseIdToken['name'];
picture = getUserDetails['picture'];
这可以解决吗?
【问题讨论】:
-
这些是函数,你需要用适当的参数调用它们,然后你可以使用[]来获取返回的部分json。喜欢
getUserDetails(token)['picture']。但最好先将它存储在一个变量中,因为你的函数结果可以为空,这会引发运行时错误。
标签: flutter dart variables undefined