我正在使用flutter_graphql并不断获得异常OperationException(linkException: ResponseFormatException(originalException: FormatException:输入的意外结束(在字符1),)^ graphqlErrors: []),
是否有一种方法来显示实际的请求发送?希望在控制台中看到实际传递的请求
class GraphqlClient {
static String _token;
static final String serverUrl =
GlobalConfiguration().getString(Config.GRAPHQL_URL);
static final HttpLink httpLink = HttpLink(
serverUrl,
);
static final AuthLink authLink = AuthLink(getToken: () async {
final SharedPrefsRepository _sharedPrefsRepository =
SharedPrefsRepository();
String accountKey = await _sharedPrefsRepository.getAccountKey();
String sessionKey= await _sharedPrefsRepository.getSessionKey();
_token = 'Bearer $accountKey, Bearer $sessionKey';
debugPrint('token '+_token);
return _token ?? '';
});
static final Link link = authLink.concat(httpLink);
static ValueNotifier<GraphQLClient> initializeClient() {
debugPrint('link '+link.toString());
final policies = Policies(
fetch: FetchPolicy.networkOnly,
);
final ValueNotifier<GraphQLClient> client = ValueNotifier<GraphQLClient>(
GraphQLClient(
cache: GraphQLCache(store: HiveStore()),
link: link,
defaultPolicies: DefaultPolicies(
watchQuery: policies,
query: policies,
mutate: policies,
),
),
);
return client;
}
}
Query(
options: QueryOptions(
document: gql(DashboardGraphQL.accountDetailsQuery),
operationName: 'AccountDetails',
),
查询
static const String accountDetailsQuery = """
query AccountDetails {
accountDetails {
... on AccountDetails {
ibanList {
accountId
bicCode
iban
}
accountType
accountNumber
accountNumberShort
accountId
ruid
companyId
accountDataOpened
email
mobile
baseCurrency
balanceInBaseCurrency
lastTransactionDate
}
... on ResponseErrors {
errors {
message
code
displayMessage
... on InternalError {
message
code
displayMessage
context
}
}
}
}
}
"""
您可以创建一个链接,记录您发送的每个请求,然后将其与您的链接连接
class LoggerLink extends Link {
@override
Stream<Response> request(
Request request, [
NextLink? forward,
]) {
Stream<Response> response = forward!(request).map((Response fetchResult) {
final ioStreamedResponse =
fetchResult.context.entry<HttpLinkResponseContext>();
if (kDebugMode) {
print("Request: " + request.toString());
print("Response:" + (ioStreamedResponse?.toString() ?? "null"));
}
return fetchResult;
}).handleError((error) {
// throw error;
});
return response;
}
LoggerLink();
}
你可以创建这个链接的实例
final _loggerLink = LoggerLink() ;
那么你将把它连接到你的客户端
client = ValueNotifier<GraphQLClient>(GraphQLClient(
link: _loggerLink.concat(httpLink),
cache: GraphQLCache(),
defaultPolicies: DefaultPolicies(
watchQuery: Policies(fetch: FetchPolicy.networkOnly),
query: Policies(fetch: FetchPolicy.networkOnly),
mutate: Policies(fetch: FetchPolicy.networkOnly),
),
));
注意
httpLink
是你的实际链接