add graph_view

This commit is contained in:
2026-01-26 16:12:38 +01:00
parent 78e27ac8d0
commit 8e612037d0
9 changed files with 573 additions and 1 deletions

View File

@@ -0,0 +1,60 @@
import 'package:flutter_tank_web_app/models/tank_model.dart';
import 'package:get/get.dart';
class GraphController extends GetxController {
final listTankModel = <TankModel>[].obs;
final sumYearKm = 0.0.obs;
final sumYearLiters = 0.0.obs;
final sumYearPrice = 0.0.obs;
final averagePricePerLiter = 0.0.obs;
@override
void onInit() {
if (Get.arguments != null) {
var args = Get.arguments as List<TankModel>;
listTankModel.addAll(args);
_calcSumms();
}
super.onInit();
}
@override
void onReady() {}
@override
void onClose() {}
// Calculate yearly summaries
void _calcSumms() {
if (listTankModel.length < 2) {
sumYearKm.value = 0.0;
sumYearLiters.value = 0.0;
sumYearPrice.value = 0.0;
return;
}
// Sort by date to calculate km correctly
listTankModel.sort((a, b) {
var dateA = DateTime.tryParse(a.szDate)!;
var dateB = DateTime.tryParse(b.szDate)!;
return dateA.compareTo(dateB);
});
var firstOdometer = double.tryParse(listTankModel.first.szOdometer) ?? 0.0;
var lastOdometer = double.tryParse(listTankModel.last.szOdometer) ?? 0.0;
sumYearKm.value = lastOdometer - firstOdometer;
double totalLiters = 0.0;
double totalPrice = 0.0;
for (var tank in listTankModel) {
totalLiters += double.tryParse(tank.szLiters) ?? 0.0;
totalPrice += double.tryParse(tank.szPriceTotal) ?? 0.0;
}
sumYearLiters.value = totalLiters;
sumYearPrice.value = totalPrice;
averagePricePerLiter.value = totalPrice / totalLiters;
}
}

View File

@@ -4,6 +4,7 @@ import '../models/tank_model.dart';
import '../pages/detail_view.dart';
import '../pages/edit_view.dart';
import '../services/appwrite_service.dart';
import '../pages/graph_view.dart';
class HomeController extends GetxController {
final isLoading = false.obs;
@@ -100,4 +101,8 @@ class HomeController extends GetxController {
Future<void> navigateToAddTankEntry() async {
await Get.offAllNamed(EditPage.namedRoute);
}
void goToGraphPage() {
Get.toNamed(GraphPage.namedRoute, arguments: listTankModel);
}
}