【问题标题】:Dart the operator [] isn't defined for 'Future<Map<String,Object>> Function(String)'Dart 运算符 [] 未为 'Future<Map<String,Object>> Function(String)' 定义
【发布时间】:2021-10-16 03:33:42
【问题描述】:

我正在尝试从this demo 为我的 Flutter 应用程序设置 Auth0,但我遇到了这个问题。我只使用 Flutter 一段时间,我修复了一些错误,但无法修复这个错误。我在这里检查了其他答案,并尝试了文档。错误信息是;

The operator [] isn't defined for 'Future&lt;Map&lt;String,Object&gt;&gt; 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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2013-05-24
    • 2014-01-29
    • 2022-01-05
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多