Flutter 在使用Flatter graphql库时,如何在http认证请求上添加自定义头?

Flutter 在使用Flatter graphql库时,如何在http认证请求上添加自定义头?,flutter,graphql,Flutter,Graphql,我正在颤振web应用程序中使用此graphql库。以下代码可用于获取身份验证令牌: import 'package:graphql_flutter/graphql_flutter.dart'; final HttpLink httpLink = HttpLink( 'https://api.github.com/graphql', ); final AuthLink authLink = AuthLink( getToken: () async => 'Beare

我正在颤振web应用程序中使用此graphql库。以下代码可用于获取身份验证令牌:

import 'package:graphql_flutter/graphql_flutter.dart';
final HttpLink httpLink = HttpLink(
    'https://api.github.com/graphql',
  );

  final AuthLink authLink = AuthLink(
    getToken: () async => 'Bearer <YOUR_PERSONAL_ACCESS_TOKEN>',
    // OR
    // getToken: () => 'Bearer <YOUR_PERSONAL_ACCESS_TOKEN>',
  );

但它给了我一个错误:
未定义命名参数'uri'。尝试将名称更正为现有命名参数的名称,或使用名称“uri”定义命名参数。

您可以像这样将其添加到HttpLink

HttpLink link = HttpLink(
    'https://api.github.com/graphql',
    headers: <String, String>{
      'x-api-key': 'xxxx',
    },
  );
HttpLink=HttpLink(
'https://api.github.com/graphql',
标题:{
“x-api-key”:“xxxx”,
},
);
然而,这是在旧版本中。。现在,为了获得更多的标题,您必须编写自己的CustomAuthLink,如

typedef GetHeaders = Future<Map<String, String>> Function();

class CustomAuthLink extends Link {
  CustomAuthLink({
    this.getHeaders,
  }) : super(
          request: (Operation operation, [NextLink forward]) {
            StreamController<FetchResult> controller;

            Future<void> onListen() async {
              try {
                final Map<String, String> headers = await getHeaders();

                operation.setContext(<String, Map<String, String>>{
                  'headers': headers
                });
              } catch (error) {
                controller.addError(error);
              }

              await controller.addStream(forward(operation));
              await controller.close();
            }

            controller = StreamController<FetchResult>(onListen: onListen);

            return controller.stream;
          },
        );

  GetHeaders getHeaders;
}
typedef GetHeaders=Future函数();
类CustomAuthLink扩展了链接{
CustomAuthLink({
这个.getHeaders,
}):超级(
请求:(操作操作,[NextLink forward]){
流量控制器;
Future onListen()异步{
试一试{
最终映射头=等待getHeaders();
操作.setContext({
“标题”:标题
});
}捕获(错误){
控制器。加法器(错误);
}
等待控制器addStream(转发(操作));
等待控制器。关闭();
}
控制器=流控制器(onListen:onListen);
返回控制器.stream;
},
);
GetHeaders-GetHeaders;
}

我已经尝试过了,但它给了我编译错误:
未定义命名参数“uri”。尝试将名称更正为现有命名参数的名称,或使用名称“uri”定义命名参数。
只需将其删除,他们似乎会更新它。我已经更新了答案并检查了它。标题上也发生了相同的错误:
未定义命名参数“headers”。尝试将名称更正为现有命名参数的名称,或使用名称“headers”定义命名参数。
。您从何处获取此库的API文档?如果删除
标题
位置参数过多,则会出现此错误:预期为1个,但找到2个。请尝试删除额外的位置参数,或指定命名参数的名称。
。sort我给您的语法是在1.0.0+1版本中,它确实包含ma、ed参数uri和关于最后一个参数的标题,您可以在此处查看