109 lines
2.9 KiB
Dart
109 lines
2.9 KiB
Dart
import 'dart:convert';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import '../models/trip.dart';
|
|
|
|
class TripService {
|
|
static const String _tripsKey = 'trips_data';
|
|
|
|
// Charger tous les voyages
|
|
Future<List<Trip>> loadTrips() async {
|
|
try {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final tripsJson = prefs.getString(_tripsKey);
|
|
|
|
if (tripsJson == null || tripsJson.isEmpty) return [];
|
|
|
|
final List<dynamic> jsonList = json.decode(tripsJson);
|
|
return jsonList.map((json) => Trip.fromMap(json)).toList();
|
|
} catch (e) {
|
|
print('Erreur lors du chargement des voyages: $e');
|
|
return [];
|
|
}
|
|
}
|
|
|
|
// Sauvegarder tous les voyages
|
|
Future<void> saveTrips(List<Trip> trips) async {
|
|
try {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final jsonList = trips.map((trip) => trip.toMap()).toList();
|
|
await prefs.setString(_tripsKey, json.encode(jsonList));
|
|
} catch (e) {
|
|
print('Erreur lors de la sauvegarde des voyages: $e');
|
|
throw Exception('Erreur de sauvegarde');
|
|
}
|
|
}
|
|
|
|
// Ajouter un nouveau voyage
|
|
Future<bool> addTrip(Trip trip) async {
|
|
try {
|
|
final trips = await loadTrips();
|
|
|
|
// Générer un ID unique
|
|
final newTrip = trip.copyWith(
|
|
id: DateTime.now().millisecondsSinceEpoch.toString(),
|
|
createdAt: DateTime.now(),
|
|
updatedAt: DateTime.now(),
|
|
);
|
|
|
|
trips.add(newTrip);
|
|
await saveTrips(trips);
|
|
return true;
|
|
} catch (e) {
|
|
print('Erreur lors de l\'ajout du voyage: $e');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Obtenir les voyages d'un utilisateur
|
|
Future<List<Trip>> getTripsByUser(String userId) async {
|
|
try {
|
|
final trips = await loadTrips();
|
|
return trips
|
|
.where(
|
|
(trip) =>
|
|
trip.createdBy == userId || trip.participants.contains(userId),
|
|
)
|
|
.toList();
|
|
} catch (e) {
|
|
print('Erreur lors de la récupération des voyages: $e');
|
|
return [];
|
|
}
|
|
}
|
|
|
|
// Mettre à jour un voyage
|
|
Future<bool> updateTrip(Trip updatedTrip) async {
|
|
try {
|
|
final trips = await loadTrips();
|
|
final index = trips.indexWhere((trip) => trip.id == updatedTrip.id);
|
|
|
|
if (index != -1) {
|
|
trips[index] = updatedTrip.copyWith(updatedAt: DateTime.now());
|
|
await saveTrips(trips);
|
|
return true;
|
|
}
|
|
return false;
|
|
} catch (e) {
|
|
print('Erreur lors de la mise à jour du voyage: $e');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Supprimer un voyage
|
|
Future<bool> deleteTrip(String tripId) async {
|
|
try {
|
|
final trips = await loadTrips();
|
|
final initialLength = trips.length;
|
|
trips.removeWhere((trip) => trip.id == tripId);
|
|
|
|
if (trips.length < initialLength) {
|
|
await saveTrips(trips);
|
|
return true;
|
|
}
|
|
return false;
|
|
} catch (e) {
|
|
print('Erreur lors de la suppression du voyage: $e');
|
|
return false;
|
|
}
|
|
}
|
|
}
|