jh_services 0.1.0
jh_services
is a Flutter package that provides a collection of services for handling common tasks in your Flutter applications, such as shared preferences, network requests, image and file picking, and checking internet connectivity.
Features
- Shared Preferences Service: Manage local storage using shared preferences.
- Network Service: Handle network requests with customizable configurations.
- Image Picker Service: Pick images from the device's gallery or camera.
- File Picker Service: Select files from the device's file system.
- Connectivity Service: Check internet connectivity status and listen for changes.
Installation
Add jh_services
to your pubspec.yaml
file:
dependencies:
jh_services: ^0.1.0
Usage
1. Setup Service Locator
Before using any of the services, you need to set up the service locator in your Flutter application. You can do this in your main.dart
file:
import 'package:flutter/material.dart';
import 'package:jh_services/jh_services.dart';
void main() {
setupServiceLocator(
sharedPrefsConfig:SharedPrefsConfig() ,
connectivityConfig: ConnectivityConfig(),
networkConfig: NetworkConfig(baseUrl: 'https://api.example.com',
defaultHeaders: {
'Content-Type': 'application/json',
// Other headers if necessary
},),
);
runApp(MyApp());
}
2. Initialize Services
You should initialize the services before using them. This is typically done in your main.dart
file after setting up the service locator:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
setupServiceLocator(
sharedPrefsConfig:SharedPrefsConfig() ,
connectivityConfig: ConnectivityConfig(),
networkConfig: NetworkConfig(baseUrl: 'https://api.example.com',
defaultHeaders: {
'Content-Type': 'application/json',
// Other headers if necessary
},),
);
runApp(MyApp());
}
3. Using the Services
Shared Preferences Service
import 'package:jh_services/jh_services.dart';
final sharedPrefsService = serviceLocator<SharedPrefsService>();
// Example of saving a value
await sharedPrefsService.saveString('key', 'value');
// Example of retrieving a value
String? value = sharedPrefsService.getString('key');
- New Methods:
saveString(String key, String value)
: Save a string value under a specific key.getString(String key)
: Retrieve a string value by key.saveDateTime(String key, DateTime value)
: Save aDateTime
value as a string.getDateTime(String key)
: Retrieve aDateTime
value.updateOrAppendToStringList(String key, List<String> newList)
: Update a string list by replacing it if it exists or appending if it doesn't.saveBulk(Map<String, dynamic> data)
: Save multiple key-value pairs in one go.getBulk(List<String> keys)
: Retrieve multiple values for a list of keys.removeBulk(List<String> keys)
: Remove multiple keys.incrementOrInitInt(String key, {int incrementBy = 1, int initialValue = 0})
: Increment or initialize an integer value.decrementInt(String key, {int decrementBy = 1})
: Decrement an integer value.toggleBool(String key)
: Toggle a boolean value.addToStringList(String key, String value)
: Add a single item to a list of strings.removeFromStringList(String key, String value)
: Remove a single item from a list of strings.getAll()
: Retrieve all key-value pairs.saveJson(String key, Map<String, dynamic> json)
: Save a JSON object by encoding it as a string.getJson(String key)
: Retrieve a JSON object by decoding a stored string.resetToDefaults(Map<String, dynamic> defaultValues)
: Reset a list of keys to specified default values.getKeysByPrefix(String prefix)
: Retrieve all keys that start with a specified prefix.getItemCount()
: Count the number of stored items.batchIncrementInts(Map<String, int> increments)
: Batch update to increment multiple integer keys by specified values.retrieveAndRemove(List<String> keys)
: Retrieve and remove values for a list of keys.getValue<T>(String key)
: Retrieve a value by type.getKeys()
: Retrieve all keys.clear()
: Clear all values.containsKey(String key)
: Check if a key exists.remove(String key)
: Remove a value associated with a specific key.
Network Service
import 'package:jh_services/jh_services.dart';
final networkService = serviceLocator<NetworkService>();
// Example of making a GET request
final response = await networkService.get('/endpoint');
// Example of making a POST request
final postResponse = await networkService.post('/endpoint', data: {'key': 'value'});
// Making a POST request with FormData
final formDataResponse = await networkService.post(
'/upload',
data: {
'file': await convertImageToMultipartFile(image), // Example of using FormData
},
isFormData: true,
);
Exception Handling in jh_services
The jh_services
package provides a robust error-handling mechanism when making network requests using Dio. Each type of network error throws a ServerException
, which contains details such as an error message, the specific error type, and a status code.
Error Handling
The following table outlines the status codes returned for each DioExceptionType
in case of an error:
Dio Exception Type | Status Code | Description |
---|---|---|
DioExceptionType.connectionTimeout |
408 | The request timed out while connecting to the server. |
DioExceptionType.sendTimeout |
504 | The request timed out while sending data to the server. |
DioExceptionType.receiveTimeout |
504 | The request timed out while receiving data from the server. |
DioExceptionType.badCertificate |
495 | The SSL certificate is invalid. |
DioExceptionType.cancel |
499 | The client canceled the request. |
DioExceptionType.connectionError |
503 | There was a network connection error. |
DioExceptionType.unknown |
520 | An unknown error occurred. |
DioExceptionType.badResponse |
Varies | Depends on the status code from the server (e.g., 400, 401, 403, 404, 409, 422, 504). |
Example of Handling Exceptions
When you make a network request and an error occurs, a ServerException
is thrown, which you can catch and process as follows:
try {
final response = await networkService.get('/endpoint');
print(response);
} on ServerException catch (e) {
// Handle the exception
print('Error: ${e.errorModel.message}');
print('Status Code: ${e.errorModel.statusCode}');
}
Image Picker Service
import 'package:jh_services/jh_services.dart';
final imagePickerService = serviceLocator<ImagePickerService>();
// Example of picking an image
final imagePath = await imagePickerService.pickImage();
File Picker Service
import 'package:jh_services/jh_services.dart';
final filePickerService = serviceLocator<FilePickerService>();
// Example of picking a single file
final filePath = await filePickerService.pickSingleFile(allowedExtensions: ['pdf', 'docx']);
// Example of picking multiple files
final filePaths = await filePickerService.pickMultipleFiles();
Connectivity Service
import 'package:jh_services/jh_services.dart';
final connectivityService = serviceLocator<ConnectivityService>();
// Example of checking current connectivity status
final isConnected = await connectivityService.isConnected();
License
This project is licensed under the MIT License. See the LICENSE file for details.