axesslogistique_dark_sdk 1.0.0
axesslogistique_dark_sdk: ^1.0.0 copied to clipboard
Unofficial JavaScript SDK for Axess Logistique API - Tunisian logistics and delivery services.
example/axesslogistique_dark_sdk_example.dart
import 'dart:io';
import 'package:axesslogistique_dark_sdk/axesslogistique_dark_sdk.dart';
void main() async {
// Initialize the client with your API token
// Use Environment.test for testing, Environment.prod for production
final client = AxessLogistiqueClient(
Environment.test, // Change to Environment.prod for production
'YOUR_API_TOKEN_HERE',
);
try {
print('๐ AxessLogistique SDK Example\n');
// 1. Create a new pickup
print('๐ฆ Creating a new pickup...');
final pickupRequest = PickupRequest(
// Source address information
adresseSource: '123 Rue de la Paix',
gouvernoratSource: 'Tunis',
delegationSource: 'Carthage',
localiteSource: 'Sidi Bou Said',
nomContactSource: 'Ahmed Ben Ali',
dateEnlevement: '2024-01-20',
telContactSource: '+21612345678',
// Destination address information
adresseDestination: '456 Avenue Habib Bourguiba',
gouvernoratDestination: 'Sfax',
delegationDestination: 'Sfax Ville',
localiteDestination: 'Sfax Centre',
nomResponsableDestination: 'Fatma Ben Salem',
telContactDestination: '+21687654321',
// Optional warehouse ID
idEntrepot: 123,
// Product information
nomProduit: 'Smartphone Samsung Galaxy S23',
description:
'Smartphone neuf avec garantie, livrรฉ dans sa boรฎte originale',
reference: 'CMD-2024-001',
quantite: 1,
fragile: true,
prixTotal: 2500.0,
livraisonGratuite: false,
produitEchange: false,
);
final pickupResponse = await client.createPickup(pickupRequest);
print('โ
Pickup created successfully!');
print(' ID: ${pickupResponse.id}');
print(' Tracking Number: ${pickupResponse.trackingNumber}');
print(' Status: ${pickupResponse.status}');
print(' Reference: ${pickupResponse.reference}');
print(' Subtotal: ${pickupResponse.prixSousTotal} TND');
print(' Fees: ${pickupResponse.fraisTotal} TND');
print(' Total: ${pickupResponse.prixTotal} TND');
print(' Destination: ${pickupResponse.destination}');
print(' Sender: ${pickupResponse.expediteur}');
if (pickupResponse.externalCode != null) {
print(' External Code: ${pickupResponse.externalCode}');
}
print('');
// 2. Get pickup status
print('๐ Getting pickup status...');
final status = await client.getPickupStatus(pickupResponse.trackingNumber);
print('โ
Pickup status retrieved!');
print(' Pickup ID: ${status.pickupId}');
print(' Tracking Number: ${status.trackingNumber}');
print(' Status: ${status.status}');
print(' Sub Status: ${status.subStatus ?? 'N/A'}');
print(' Client Name: ${status.clientName}');
print(' Client Phone: ${status.clientPhone}');
print(' Updated At: ${status.updatedAt}');
if (status.livreur != null) {
print(' Driver: ${status.livreur}');
print(' Driver Phone: ${status.livreurTel ?? 'N/A'}');
}
if (status.reason != null) {
print(' Reason: ${status.reason}');
}
print('');
// 3. Get multiple pickup statuses
print('๐ Getting multiple pickup statuses...');
final multipleStatuses = await client.getManyPickupStatuses([
pickupResponse.trackingNumber,
'TRK123456789', // Example tracking number
'TRK987654321', // Example tracking number
]);
print('โ
Multiple statuses retrieved!');
print(' Found ${multipleStatuses.length} statuses:');
for (final status in multipleStatuses) {
print(' - ${status.trackingNumber}: ${status.status}');
}
print('');
// 4. Download delivery note (PDF)
print('๐ Downloading delivery note...');
final pdfBytes = await client.downloadBonDeCommande(
pickupResponse.trackingNumber,
);
// Save the PDF to a file
final file = File('bon_de_commande_${pickupResponse.trackingNumber}.pdf');
await file.writeAsBytes(pdfBytes);
print('โ
Delivery note downloaded!');
print(' Saved to: ${file.path}');
print(' File size: ${pdfBytes.length} bytes');
print('');
// 5. Get available zones
print('๐ Getting available zones...');
final zones = await client.getZones();
print('โ
Zones retrieved!');
print(' Available zones:');
if (zones['zones'] != null) {
final zonesList = zones['zones'] as List;
for (final zone in zonesList) {
print(' - ${zone['name']} (ID: ${zone['id']})');
}
} else {
print(' No zones data available');
}
print('');
print('๐ All operations completed successfully!');
} catch (e) {
print('โ Error occurred: $e');
// Handle specific error types
if (e.toString().contains('Invalid token')) {
print('๐ก Make sure you have provided a valid API token');
} else if (e.toString().contains('Network')) {
print('๐ก Check your internet connection');
} else if (e.toString().contains('404')) {
print('๐ก The requested resource was not found');
}
}
}
// Example of error handling and retry logic
Future<void> createPickupWithRetry(
AxessLogistiqueClient client,
PickupRequest request, {
int maxRetries = 3,
Duration delay = const Duration(seconds: 2),
}) async {
for (int attempt = 1; attempt <= maxRetries; attempt++) {
try {
final response = await client.createPickup(request);
print('โ
Pickup created on attempt $attempt');
return;
} catch (e) {
print('โ Attempt $attempt failed: $e');
if (attempt < maxRetries) {
print('โณ Retrying in ${delay.inSeconds} seconds...');
await Future.delayed(delay);
} else {
print('๐ฅ All retry attempts failed');
rethrow;
}
}
}
}
// Example of batch pickup creation
Future<List<PickupResponse>> createBatchPickups(
AxessLogistiqueClient client,
List<PickupRequest> requests,
) async {
final responses = <PickupResponse>[];
for (int i = 0; i < requests.length; i++) {
try {
print('Creating pickup ${i + 1}/${requests.length}...');
final response = await client.createPickup(requests[i]);
responses.add(response);
print('โ
Pickup ${i + 1} created: ${response.trackingNumber}');
} catch (e) {
print('โ Failed to create pickup ${i + 1}: $e');
}
}
return responses;
}