Вызов API завершается неудачно при расширении BaseClient во Flutter - PullRequest
0 голосов
/ 29 февраля 2020

Я расширяю класс http BaseClient во Flutter, чтобы добавить общие заголовки для всех вызовов API. Вот мой класс:

import 'dart:convert';

import 'package:http/http.dart';

class MyApiClient extends BaseClient {
  final Map<String, String> defaultHeaders;
  final Client _client = Client();

  MyApiClient({this.defaultHeaders = const {}});


  @override
  Future<StreamedResponse> send(BaseRequest request) {
    print('base request is****$request');
    return _client.send(request);
  }

  @override
  Future<Response> get(url, {Map<String, String> headers}) {
    if(headers != null)
      headers.addAll(defaultHeaders);
    for (var value in defaultHeaders.values) print('Default headers are $value');

    return _client.get(url, headers: headers);
  }

  @override
  Future<Response> post(url, {Map<String, String> headers, body, Encoding encoding}) {
    headers.addAll(defaultHeaders);
    return _client.post(url, headers: headers);
  }

  @override
  Future<Response> patch(url, {Map<String, String> headers, body, Encoding encoding}) {
    headers.addAll(defaultHeaders);
    return _client.patch(url, headers: headers);
  }


  @override
  Future<Response> put(url,
      {Map<String, String> headers, body, Encoding encoding}) {
    headers.addAll(defaultHeaders);
    return _client.put(url,
        headers: headers, body: body);
  }

  @override
  Future<Response> head(url, {Map<String, String> headers}) {
    headers.addAll(defaultHeaders);
    return _client.head(url, headers: headers);
  }

  @override
  Future<Response> delete(url, {Map<String, String> headers}) {
    headers.addAll(defaultHeaders);
    return _client.delete(url, headers: headers);
  }
}

В appConstants.dart я создаю экземпляр MyApiClient и инициализирую его после успешного входа в систему. Поскольку я хочу передать токен в заголовках всех вызовов API и получаю токен только после успешного входа в систему.

appConstants.dart

MyApiClient myApiClient;

void initializeMyApiClient(String token) {
  Map<String, String> headers = {"Authorization" : "Bearer $token"};
  myApiClient= new MyApiClient(defaultHeaders: headers);
}

Я вызываю initializeMyApiClient('$token') сразу после успешного входа. И затем, когда я вызываю другой API с помощью myApiClient, я получаю внутреннюю ошибку сервера 500:

final response = await myApiClient.get("$baseUrl/api/info");

, тогда как когда я использую http-клиент напрямую, я получаю ответ об успешном выполнении.

Что я делаю не так? Пожалуйста, помогите.

import 'dart:convert';
import 'package:http/http.dart' show Client;

Client client = Client();
Map<String, String> headers = {"Authorization" : "Bearer $token"};
final response = await client.get("$baseUrl/api/info", headers: headers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...