add detail view

This commit is contained in:
2026-01-23 08:33:58 +01:00
parent aeca07a5a3
commit 5f4f2c4379
10 changed files with 592 additions and 17 deletions

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controller/home_controller.dart';
import '../widgets/my_styled_loading_indicator.dart';
class HomePage extends GetView<HomeController> {
static const String namedRoute = '/home-page';
@@ -31,26 +32,178 @@ class HomePage extends GetView<HomeController> {
),
],
),
body: Obx(
() => homCtrl.isLoading.value == false
? ListView.builder(
itemBuilder: (context, index) {
var tank = homCtrl.listTankModel[index];
return ListTile(
title: Text(
'${tank.szDate} - ${tank.szLiters}L - ${tank.szPricePerLiter}€/L',
),
subtitle: Text(
'Total: ${tank.szPriceTotal}€ - Odometer: ${tank.szOdometer}km',
),
);
},
itemCount: homCtrl.listTankModel.length,
)
: Center(child: CircularProgressIndicator()),
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Colors.blueGrey[800]!,
Colors.blueGrey[600]!,
Colors.blueGrey[300]!,
Colors.blue[100]!,
],
),
),
child: Obx(
() => homCtrl.isLoading.value == false
? homCtrl.listTankModel.isEmpty
? MyStyledLoadingIndicator()
: ListView.builder(
padding: const EdgeInsets.all(16),
itemBuilder: (context, index) {
var tank = homCtrl.listTankModel[index];
return Card(
elevation: 2,
margin: const EdgeInsets.only(bottom: 12),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
child: InkWell(
borderRadius: BorderRadius.circular(12),
onTap: () {
// Tap action if needed
homCtrl.viewTankDetails(tank);
},
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Container(
padding: const EdgeInsets.all(
8,
),
decoration: BoxDecoration(
color: Colors.blueGrey[50],
borderRadius:
BorderRadius.circular(
8,
),
),
child: Icon(
Icons.local_gas_station,
color: Colors.blueGrey[700],
size: 24,
),
),
const SizedBox(width: 12),
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
tank.szDate,
style: const TextStyle(
fontSize: 16,
fontWeight:
FontWeight.w600,
),
),
const SizedBox(height: 2),
Text(
'${tank.szLiters} Liter',
style: TextStyle(
fontSize: 14,
color: Colors.grey[600],
),
),
],
),
],
),
Container(
padding:
const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
),
decoration: BoxDecoration(
color: Colors.green[50],
borderRadius:
BorderRadius.circular(20),
),
child: Text(
'${tank.szPriceTotal}',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.green[700],
),
),
),
],
),
const SizedBox(height: 12),
Divider(
color: Colors.grey[300],
height: 1,
),
const SizedBox(height: 12),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
_buildInfoChip(
icon: Icons.euro,
label: 'Preis/L',
value: '${tank.szPricePerLiter}',
),
_buildInfoChip(
icon: Icons.speed,
label: 'Km-Stand',
value: '${tank.szOdometer} km',
),
],
),
],
),
),
),
);
},
itemCount: homCtrl.listTankModel.length,
)
: Center(
child: CircularProgressIndicator(color: Colors.blueGrey),
),
),
),
),
),
);
}
Widget _buildInfoChip({
required IconData icon,
required String label,
required String value,
}) {
return Row(
children: [
Icon(icon, size: 16, color: Colors.blueGrey[600]),
const SizedBox(width: 4),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
label,
style: TextStyle(fontSize: 11, color: Colors.grey[600]),
),
Text(
value,
style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w600),
),
],
),
],
);
}
}