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

@@ -0,0 +1,76 @@
import 'package:flutter/material.dart';
import '../models/tank_model.dart';
class DetailHeaderWidget extends StatelessWidget {
final TankModel tank;
const DetailHeaderWidget({super.key, required this.tank});
@override
Widget build(BuildContext context) {
return Card(
elevation: 4,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [Colors.green[600]!, Colors.green[800]!],
),
borderRadius: BorderRadius.circular(16),
),
padding: const EdgeInsets.all(24),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Tankvorgang',
style: TextStyle(
color: Colors.white.withAlpha(230),
fontSize: 14,
fontWeight: FontWeight.w500,
),
),
const SizedBox(height: 4),
Text(
tank.szDate,
style: const TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'Gesamtpreis',
style: TextStyle(
color: Colors.white.withAlpha(230),
fontSize: 14,
fontWeight: FontWeight.w500,
),
),
const SizedBox(height: 4),
Text(
'${tank.szPriceTotal}',
style: const TextStyle(
color: Colors.white,
fontSize: 28,
fontWeight: FontWeight.bold,
),
),
],
),
],
),
),
);
}
}

View File

@@ -0,0 +1,51 @@
import 'package:flutter/material.dart';
class DetailInfoCardWidget extends StatelessWidget {
final String title;
final List<Widget> children;
const DetailInfoCardWidget({
super.key,
required this.title,
required this.children,
});
@override
Widget build(BuildContext context) {
return Card(
elevation: 2,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
width: 4,
height: 20,
decoration: BoxDecoration(
color: Colors.blueGrey[700],
borderRadius: BorderRadius.circular(2),
),
),
const SizedBox(width: 8),
Text(
title,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.blueGrey[800],
),
),
],
),
const SizedBox(height: 16),
...children,
],
),
),
);
}
}

View File

@@ -0,0 +1,61 @@
import 'package:flutter/material.dart';
class DetailStatWidget extends StatelessWidget {
final IconData icon;
final String label;
final String value;
final Color iconColor;
final double valueSize;
final FontWeight valueWeight;
const DetailStatWidget({
super.key,
required this.icon,
required this.label,
required this.value,
this.iconColor = Colors.blueGrey,
this.valueSize = 18,
this.valueWeight = FontWeight.w600,
});
@override
Widget build(BuildContext context) {
return Row(
children: [
Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: iconColor.withAlpha(100),
borderRadius: BorderRadius.circular(12),
),
child: Icon(icon, color: iconColor, size: 28),
),
const SizedBox(width: 16),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
label,
style: TextStyle(
fontSize: 13,
color: Colors.grey[600],
fontWeight: FontWeight.w500,
),
),
const SizedBox(height: 4),
Text(
value,
style: TextStyle(
fontSize: valueSize,
fontWeight: valueWeight,
color: Colors.grey[900],
),
),
],
),
),
],
);
}
}

View File

@@ -0,0 +1,32 @@
import 'package:flutter/material.dart';
class MyStyledLoadingIndicator extends StatelessWidget {
const MyStyledLoadingIndicator({
super.key,
});
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.local_gas_station_outlined,
size: 80,
color: Colors.grey[400],
),
const SizedBox(height: 16),
Text(
'Keine Tankeinträge vorhanden',
style: TextStyle(
fontSize: 18,
color: Colors.grey[600],
fontWeight: FontWeight.w500,
),
),
],
),
);
}
}