diff --git a/packages/google_fonts/lib/src/google_fonts_all_parts.dart b/packages/google_fonts/lib/src/google_fonts_all_parts.dart index fee69435c515..1cace54082a5 100644 --- a/packages/google_fonts/lib/src/google_fonts_all_parts.dart +++ b/packages/google_fonts/lib/src/google_fonts_all_parts.dart @@ -9,6 +9,7 @@ import 'dart:ui' as ui; import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; import 'google_fonts_base.dart'; import 'google_fonts_parts/part_a.dart'; @@ -44,6 +45,13 @@ class Config { /// Whether or not the GoogleFonts library can make requests to /// [fonts.google.com](https://fonts.google.com/) to retrieve font files. bool allowRuntimeFetching = true; + + /// The HTTP client used to fetch fonts. + /// + /// If this is null, a shared default [http.Client] will be used. + /// + /// If you supply a client, you are responsible for closing it. + http.Client? httpClient; } /// Provides configuration, and static methods to obtain [TextStyle]s and [TextTheme]s. diff --git a/packages/google_fonts/lib/src/google_fonts_base.dart b/packages/google_fonts/lib/src/google_fonts_base.dart index 2f0db1178859..1371defc098a 100755 --- a/packages/google_fonts/lib/src/google_fonts_base.dart +++ b/packages/google_fonts/lib/src/google_fonts_base.dart @@ -32,9 +32,8 @@ void clearCache() => _loadedFonts.clear(); /// the [FontLoader], that future is removed from this set. final Set> pendingFontFutures = >{}; -/// The client used to fetch fonts. -@visibleForTesting -http.Client httpClient = http.Client(); +/// Default client used to fetch fonts when one is not supplied. +final http.Client _httpClient = http.Client(); /// The asset manifest to use for loading pre-bundled fonts. @visibleForTesting @@ -260,8 +259,9 @@ Future _httpFetchFontAndSaveToDevice( } http.Response response; + final http.Client client = GoogleFonts.config.httpClient ?? _httpClient; try { - response = await httpClient.get(uri); + response = await client.get(uri); } catch (e) { throw Exception('Failed to load font with url ${file.url}: $e'); } diff --git a/packages/google_fonts/test/google_fonts_text_style_test.dart b/packages/google_fonts/test/google_fonts_text_style_test.dart index bc705d8a8f4b..9d1a102c1568 100644 --- a/packages/google_fonts/test/google_fonts_text_style_test.dart +++ b/packages/google_fonts/test/google_fonts_text_style_test.dart @@ -57,9 +57,9 @@ void main() { late MockHttpClient mockHttpClient; setUp(() async { - mockHttpClient = MockHttpClient(); - httpClient = mockHttpClient; assetManifest = MockAssetManifest(); + mockHttpClient = MockHttpClient(); + GoogleFonts.config.httpClient = mockHttpClient; GoogleFonts.config.allowRuntimeFetching = true; when(mockHttpClient.gets(any)).thenAnswer((_) async { return http.Response(_fakeResponse, 200); diff --git a/packages/google_fonts/test/load_font_if_necessary_test.dart b/packages/google_fonts/test/load_font_if_necessary_test.dart index 5ce4fad116c9..fe35623b230c 100644 --- a/packages/google_fonts/test/load_font_if_necessary_test.dart +++ b/packages/google_fonts/test/load_font_if_necessary_test.dart @@ -116,9 +116,9 @@ void main() { late MockHttpClient mockHttpClient; setUp(() async { - mockHttpClient = MockHttpClient(); - httpClient = mockHttpClient; assetManifest = MockAssetManifest(); + mockHttpClient = MockHttpClient(); + GoogleFonts.config.httpClient = mockHttpClient; GoogleFonts.config.allowRuntimeFetching = true; when(mockHttpClient.gets(any)).thenAnswer((_) async { return http.Response(_fakeResponse, 200); diff --git a/packages/google_fonts/test/load_font_if_necessary_with_local_fonts_test.dart b/packages/google_fonts/test/load_font_if_necessary_with_local_fonts_test.dart index f352c0bfc779..5182e8dc880a 100644 --- a/packages/google_fonts/test/load_font_if_necessary_with_local_fonts_test.dart +++ b/packages/google_fonts/test/load_font_if_necessary_with_local_fonts_test.dart @@ -76,9 +76,9 @@ void main() { late MockHttpClient mockHttpClient; setUp(() async { - mockHttpClient = MockHttpClient(); - httpClient = mockHttpClient; assetManifest = MockAssetManifest(); + mockHttpClient = MockHttpClient(); + GoogleFonts.config.httpClient = mockHttpClient; GoogleFonts.config.allowRuntimeFetching = true; when(mockHttpClient.gets(any)).thenAnswer((_) async { return http.Response(_fakeResponse, 200);