flutter - Dart 运算符 [] 未为“未来”定义
问题描述
我正在尝试从此演示中为我的 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'];
这可以解决吗?
解决方案
getUserDetails
是一个函数,因此它没有[]
运算符。
相反,请尝试:var userDetails = await getUserDetails("token..."); picture = userDetails["picture"];
推荐阅读
- python - 如何避免使用 matplotplib 绘制系列的某些值
- discord.js - 清除命令 Discord.JS 有效但弹出错误?
- r - 在计算转换结果变量的置信区间时,emmeans 是否使用 lm_robust 集群稳健标准误差?
- reactjs - 导入 * 作为 React 摇树?
- moqui - 如何在 Moqui 中维护产品标签
- django - Django - TypeError - save() 意外参数“force_insert”
- javascript - 尝试将多个变量分配给相同的值时,ESLint 会引发错误
- html - 只对齐一个跨度中心
- php - 带有 Symfony PHP 的 Twig 中的组件级控制器
- java - 从 JsonNode 数组中获取元素