add data service and homepage data retrieval

This commit is contained in:
2025-07-24 22:59:50 +01:00
parent e6ed9d01c2
commit 652e83bf38
8 changed files with 157 additions and 20 deletions

View File

@@ -1,6 +1,5 @@
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:mileograph_flutter/services/authservice.dart';
typedef TokenProvider = String? Function();

View File

@@ -1,4 +1,3 @@
import 'package:provider/provider.dart';
import 'package:flutter/foundation.dart';
import 'package:mileograph_flutter/objects/objects.dart';
import 'package:mileograph_flutter/services/apiService.dart';
@@ -65,4 +64,9 @@ class AuthService extends ChangeNotifier {
email: userResponse['email'],
);
}
void logout() {
_user = null;
notifyListeners();
}
}

View File

@@ -0,0 +1,51 @@
import 'package:flutter/foundation.dart';
import 'package:mileograph_flutter/objects/objects.dart';
import 'package:mileograph_flutter/services/apiService.dart'; // assumes you've moved HomepageStats + submodels to a separate file
class DataService extends ChangeNotifier {
final ApiService api;
DataService({required this.api});
HomepageStats? _homepageStats;
HomepageStats? get homepageStats => _homepageStats;
bool _isHomepageLoading = false;
bool get isHomepageLoading => _isHomepageLoading;
Future<void> fetchHomepageStats() async {
_isHomepageLoading = true;
notifyListeners();
try {
final json = await api.get('/stats/homepage');
_homepageStats = HomepageStats.fromJson(json);
} catch (e) {
debugPrint('Failed to fetch homepage stats: $e');
_homepageStats = null;
} finally {
_isHomepageLoading = false;
notifyListeners();
}
}
void clear() {
_homepageStats = null;
notifyListeners();
}
double getMileageForCurrentYear() {
final currentYear = DateTime.now().year;
return getMileageForYear(currentYear) ?? 0;
}
double? getMileageForYear(int year) {
return _homepageStats?.yearlyMileage
.firstWhere(
(entry) => entry.year == year,
orElse: () => YearlyMileage(year: null, mileage: 0),
)
.mileage ??
0;
}
}