首页 > 解决方案 > 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'];

这可以解决吗?

标签: flutterdartvariablesundefined

解决方案


getUserDetails是一个函数,因此它没有[]运算符。

相反,请尝试:var userDetails = await getUserDetails("token..."); picture = userDetails["picture"];


推荐阅读