web-dev-qa-db-ja.com

Flutter HTTPリクエストですべてのリクエストのデフォルトヘッダーを設定する最良の方法

この質問が非常に基本的である場合は申し訳ありませんが、私は羽ばたきが初めてで、最近、HTTPリクエストでデフォルトヘッダーを設定するための良い方法を見つけることができませんでした。組み込みの簡単な方法ですが、ドキュメントでは見つかりませんでした。

12
Potato

このシンプルで簡単な方法は私のために働きました

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

カスタムClientの@Radek Manasekのアイデアを拡張するだけで、すべてのメソッドをオーバーライドしているので、再度記述する必要はありません。

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