Skip to content

Instantly share code, notes, and snippets.

View dev4jam's full-sized avatar

Dev4Jam dev4jam

  • Dev4Jam
  • Sydney
View GitHub Profile
@dev4jam
dev4jam / network_service.dart
Created March 21, 2022 06:57
Full source code of the Network Service
import 'package:freezed_annotation/freezed_annotation.dart';
import 'dart:io';
part 'NetworkRequestBody.freezed.dart';
part 'NetworkResponse.freezed.dart';
class AccessTokenResponse {
String? accessToken;
AccessTokenResponse.fromJson(Map<String, dynamic> json) {
accessToken = json['access_token'];
@dev4jam
dev4jam / final_network_service.dart
Created March 21, 2022 06:51
Final network service
class NetworkService {
NetworkService({
required this.baseUrl,
dioClient,
httpHeaders,
}) : this._dio = dioClient,
this._headers = httpHeaders ?? {};
Dio? _dio;
final String baseUrl;
Map<String, String> _headers;
@dev4jam
dev4jam / isolate_function_call.dart
Created March 21, 2022 06:50
Isolate function call
final req = _PreparedNetworkRequest<Model>(
request,
parser,
_dio!,
{..._headers, ...(request.headers ?? {})},
onSendProgress,
onReceiveProgress,
);
final result = await compute(
executeRequest<Model>,
@dev4jam
dev4jam / isolate_function.dart
Created March 21, 2022 06:49
Isolate function
Future<NetworkResponse<Model>> executeRequest<Model>(
_PreparedNetworkRequest request,
) async {
try {
dynamic body = request.request.data.whenOrNull(
json: (data) => data,
text: (data) => data,
);
final response = await request.dio.request(
request.request.path,
@dev4jam
dev4jam / prepared_network_request.dart
Created March 21, 2022 06:49
Prepared network request
class _PreparedNetworkRequest<Model> {
const _PreparedNetworkRequest(
this.request,
this.parser,
this.dio,
this.headers,
this.onSendProgress,
this.onReceiveProgress,
);
final NetworkRequest request;
@dev4jam
dev4jam / basic_auth.dart
Created March 21, 2022 06:48
Basic auth
void addBasicAuth(String accessToken) {
_headers['Authorization'] = 'Bearer $accessToken';
}
@dev4jam
dev4jam / execute_request.dart
Created March 21, 2022 06:47
Execute request
try {
final response = await _dio!.request(
request.path,
data: body,
queryParameters: request.queryParams,
options: Dio.Options(
method: request.type.name,
headers: {..._headers, ...(request.headers ?? {})}, // Combine all headers
),
onSendProgress: onSendProgress,
@dev4jam
dev4jam / body_union.dart
Created March 21, 2022 06:46
Body union
dynamic body = request.data.whenOrNull(
json: (data) => data,
text: (data) => data,
);
@dev4jam
dev4jam / network_service_prototype.dart
Created March 21, 2022 06:45
Network Service Prototype
class NetworkService {
NetworkService({
required this.baseUrl, // Base service url
dioClient, // Prepared Dio instance could be injected
httpHeaders, // Global headers could be provided as well
}) : this._dio = dioClient,
this._headers = httpHeaders ?? {};
Dio? _dio;
final String baseUrl;
Map<String, String> _headers;
@dev4jam
dev4jam / network_response.dart
Created March 21, 2022 06:45
Network response
import 'package:freezed_annotation/freezed_annotation.dart';
part 'NetworkResponse.freezed.dart';
@freezed
class NetworkResponse<Model> with _$NetworkResponse {
const factory NetworkResponse.ok(Model data) = Ok;
const factory NetworkResponse.invalidParameters(String message) = InvalidParameters;
const factory NetworkResponse.noAuth(String message) = NoAuth; //401
const factory NetworkResponse.noAccess(String message) = NoAccess; //403
const factory NetworkResponse.badRequest(String message) = BadRequest; //400
const factory NetworkResponse.notFound(String message) = NotFound; //404