From fe3bbdc10ec7dd5d726b3347a137b151c5eb66e7 Mon Sep 17 00:00:00 2001 From: sindhu Date: Sat, 15 Feb 2025 13:28:38 +0700 Subject: [PATCH] step 5 : add base repository dan dio provider --- lib/provider/dio_provider.dart | 4 ++ lib/repository/base_repository.dart | 106 ++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 lib/provider/dio_provider.dart create mode 100644 lib/repository/base_repository.dart diff --git a/lib/provider/dio_provider.dart b/lib/provider/dio_provider.dart new file mode 100644 index 0000000..7596edf --- /dev/null +++ b/lib/provider/dio_provider.dart @@ -0,0 +1,4 @@ +import 'package:dio/dio.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final dioProvider = Provider((ref) => Dio()); \ No newline at end of file diff --git a/lib/repository/base_repository.dart b/lib/repository/base_repository.dart new file mode 100644 index 0000000..a3496a2 --- /dev/null +++ b/lib/repository/base_repository.dart @@ -0,0 +1,106 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:dio/dio.dart'; + +abstract class BaseRepository { + final Dio dio; + BaseRepository({required this.dio}); + + // POST PAKE ContentType JSON + Future> post({ + required Map param, + required String service, + String? token, + }) async { + try { + final response = await dio.post( + // Constant.baseUrl + service, + service, + data: jsonEncode(param), + options: Options( + headers: token != null + ? { + HttpHeaders.contentTypeHeader: "application/json", + HttpHeaders.authorizationHeader: "Bearer $token", + } + : { + HttpHeaders.contentTypeHeader: "application/json", + }, + contentType: "application/json", + ), + ); + if (response.statusCode != 200) { + throw BaseRepositoryException( + message: "Invalid Http Response ${response.statusCode}", + ); + } + Map jsonData = jsonDecode(response.data); + if (jsonData["status"] != "OK") { + throw BaseRepositoryException( + message: jsonData["message"], + ); + } else { + return jsonData; + } + } on DioException catch (e) { + throw BaseRepositoryException(message: e.message ?? ""); + } on SocketException catch (e) { + throw BaseRepositoryException(message: e.message); + } on BaseRepositoryException catch (e) { + throw BaseRepositoryException(message: e.message); + } + } + + // GET Pake Content Type JSON + Future> get({ + // required Map param, + required String service, + String? token, + }) async { + try { + final response = await dio.get( + // Constant.baseUrl + service, + service, + // data: jsonEncode(param), + options: Options( + headers: token != null + ? { + HttpHeaders.contentTypeHeader: "application/json", + HttpHeaders.authorizationHeader: "Bearer $token", + } + : { + HttpHeaders.contentTypeHeader: "application/json", + }, + contentType: "application/json", + ), + ); + if (response.statusCode != 200) { + throw BaseRepositoryException( + message: "Invalid Http Response ${response.statusCode}", + ); + } + Map jsonData = jsonDecode(response.data); + if (jsonData["status"] != "OK") { + throw BaseRepositoryException( + message: jsonData["message"], + ); + } else { + return jsonData; + } + } on DioException catch (e) { + throw BaseRepositoryException(message: e.message ?? ""); + } on SocketException catch (e) { + throw BaseRepositoryException(message: e.message); + } on BaseRepositoryException catch (e) { + throw BaseRepositoryException(message: e.message); + } + } +} + +class BaseRepositoryException implements Exception { + final String message; + BaseRepositoryException({ + required this.message, + }); +} \ No newline at end of file