Update http client usage in request http service

This commit is contained in:
Sixtus Agbo
2024-03-26 04:06:42 +01:00
parent f3a7865459
commit 15c573d181
2 changed files with 26 additions and 16 deletions

View File

@ -1,11 +1,12 @@
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'settings_providers.dart'; import 'package:http/http.dart' as http;
import 'ui_providers.dart';
import '../consts.dart';
import '../models/models.dart'; import '../models/models.dart';
import '../services/services.dart' show hiveHandler, HiveHandler, request; import '../services/services.dart' show hiveHandler, HiveHandler, request;
import '../utils/utils.dart' show getNewUuid, collectionToHAR; import '../utils/utils.dart' show getNewUuid, collectionToHAR;
import '../consts.dart'; import 'settings_providers.dart';
import 'package:http/http.dart' as http; import 'ui_providers.dart';
final selectedIdStateProvider = StateProvider<String?>((ref) => null); final selectedIdStateProvider = StateProvider<String?>((ref) => null);
@ -24,13 +25,16 @@ final requestSequenceProvider = StateProvider<List<String>>((ref) {
return ids ?? []; return ids ?? [];
}); });
final client = http.Client();
final StateNotifierProvider<CollectionStateNotifier, Map<String, RequestModel>?> final StateNotifierProvider<CollectionStateNotifier, Map<String, RequestModel>?>
collectionStateNotifierProvider = collectionStateNotifierProvider = StateNotifierProvider(
StateNotifierProvider((ref) => CollectionStateNotifier(ref, hiveHandler)); (ref) => CollectionStateNotifier(ref, hiveHandler, client));
class CollectionStateNotifier class CollectionStateNotifier
extends StateNotifier<Map<String, RequestModel>?> { extends StateNotifier<Map<String, RequestModel>?> {
CollectionStateNotifier(this.ref, this.hiveHandler) : super(null) { CollectionStateNotifier(this.ref, this.hiveHandler, this.httpClient)
: super(null) {
var status = loadData(); var status = loadData();
Future.microtask(() { Future.microtask(() {
if (status) { if (status) {
@ -46,6 +50,7 @@ class CollectionStateNotifier
final Ref ref; final Ref ref;
final HiveHandler hiveHandler; final HiveHandler hiveHandler;
final baseResponseModel = const ResponseModel(); final baseResponseModel = const ResponseModel();
final http.Client httpClient;
bool hasId(String id) => state?.keys.contains(id) ?? false; bool hasId(String id) => state?.keys.contains(id) ?? false;
@ -187,6 +192,7 @@ class CollectionStateNotifier
(http.Response?, Duration?, String?)? responseRec = await request( (http.Response?, Duration?, String?)? responseRec = await request(
requestModel, requestModel,
defaultUriScheme: defaultUriScheme, defaultUriScheme: defaultUriScheme,
client: httpClient,
); );
late final RequestModel newRequestModel; late final RequestModel newRequestModel;
if (responseRec.$1 == null) { if (responseRec.$1 == null) {

View File

@ -1,14 +1,16 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:apidash/utils/utils.dart';
import 'package:apidash/models/models.dart';
import 'package:apidash/consts.dart'; import 'package:apidash/consts.dart';
import 'package:apidash/models/models.dart';
import 'package:apidash/utils/utils.dart';
import 'package:http/http.dart' as http;
Future<(http.Response?, Duration?, String?)> request( Future<(http.Response?, Duration?, String?)> request(
RequestModel requestModel, { RequestModel requestModel, {
String defaultUriScheme = kDefaultUriScheme, String defaultUriScheme = kDefaultUriScheme,
required http.Client client,
}) async { }) async {
(Uri?, String?) uriRec = getValidRequestUri( (Uri?, String?) uriRec = getValidRequestUri(
requestModel.url, requestModel.url,
@ -66,23 +68,25 @@ Future<(http.Response?, Duration?, String?)> request(
} }
switch (requestModel.method) { switch (requestModel.method) {
case HTTPVerb.get: case HTTPVerb.get:
response = await http.get(requestUrl, headers: headers); response = await client.get(requestUrl, headers: headers);
break; break;
case HTTPVerb.head: case HTTPVerb.head:
response = await http.head(requestUrl, headers: headers); response = await client.head(requestUrl, headers: headers);
break; break;
case HTTPVerb.post: case HTTPVerb.post:
response = await http.post(requestUrl, headers: headers, body: body); response =
await client.post(requestUrl, headers: headers, body: body);
break; break;
case HTTPVerb.put: case HTTPVerb.put:
response = await http.put(requestUrl, headers: headers, body: body); response = await client.put(requestUrl, headers: headers, body: body);
break; break;
case HTTPVerb.patch: case HTTPVerb.patch:
response = await http.patch(requestUrl, headers: headers, body: body); response =
await client.patch(requestUrl, headers: headers, body: body);
break; break;
case HTTPVerb.delete: case HTTPVerb.delete:
response = response =
await http.delete(requestUrl, headers: headers, body: body); await client.delete(requestUrl, headers: headers, body: body);
break; break;
} }
stopwatch.stop(); stopwatch.stop();