web-dev-qa-db-fra.com

Meilleure façon de définir l'en-tête par défaut pour toutes les demandes dans une demande http flutter

Désolé si cette question est si basique, mais je suis nouveau dans le flottement et je n'ai pas réussi récemment à trouver un bon moyen de définir des en-têtes par défaut dans la requête HTTP. Je peux étendre la classe ou envelopper une fonction, mais ne devrait-il pas y avoir un moyen simple qui est intégré mais je ne pouvais pas le trouver dans la documentation.

12
Potato

cette façon simple et facile a fonctionné pour moi

var _dio = Dio();
_dio.options.headers= {"Authorization" : token};
0
Reza Esfandiari

En développant simplement l'idée @Radek Manasek d'un Client personnalisé, je remplace toutes les méthodes afin que vous n'ayez pas à les réécrire.

import 'Dart:convert';

import 'package:http/http.Dart' as http;
import 'package:http/http.Dart';

class MyClient extends http.BaseClient {
  final Map<String, String> _defaultHeaders;
  http.Client _httpClient = http.Client();

  MyClient(this._defaultHeaders);

  @override
  Future<http.StreamedResponse> send(http.BaseRequest request) {
    return _httpClient.send(request);
  }

  @override
  Future<Response> get(url, {Map<String, String> headers}) {
    return _httpClient.get(url, headers: _mergedHeaders(headers));
  }

  @override
  Future<Response> post(url, {Map<String, String> headers, dynamic body, Encoding encoding}) {
    return _httpClient.post(url, headers: _mergedHeaders(headers), body: body, encoding: encoding);
  }

  @override
  Future<Response> patch(url, {Map<String, String> headers, dynamic body, Encoding encoding}) {
    return _httpClient.patch(url, headers: _mergedHeaders(headers), body: body, encoding: encoding);
  }

  @override
  Future<Response> put(url, {Map<String, String> headers, dynamic body, Encoding encoding}) {
    return _httpClient.put(url, headers: _mergedHeaders(headers), body: body, encoding: encoding);
  }

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

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

  Map<String, String> _mergedHeaders(Map<String, String> headers) =>
      {...?_defaultHeaders, ...?headers};
}
0
vovahost