170 lines
6 KiB
Text
170 lines
6 KiB
Text
|
import 'package:flutter/material.dart';
|
||
|
import 'package:flutter_svg/svg.dart';
|
||
|
import 'package:intl/intl.dart';
|
||
|
import 'main.dart';
|
||
|
import 'studierendenausweis.dart';
|
||
|
|
||
|
class ShowSemester extends StatefulWidget {
|
||
|
final bool isWinter;
|
||
|
final DateTime now;
|
||
|
const ShowSemester(this.isWinter, this.now, {super.key});
|
||
|
|
||
|
@override
|
||
|
State<ShowSemester> createState() => _ShowSemester();
|
||
|
}
|
||
|
|
||
|
class _ShowSemester extends State<ShowSemester> with TickerProviderStateMixin {
|
||
|
late final controller = AnimationController(
|
||
|
duration: const Duration(seconds: 6),
|
||
|
vsync: this,
|
||
|
)..repeat(reverse: true);
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
bool isWinter = widget.isWinter;
|
||
|
final now = widget.now;
|
||
|
final format = DateFormat("dd.MM.yyyy", 'de_DE');
|
||
|
final beginning = isWinter
|
||
|
? now.month > 6
|
||
|
? '01.10.${now.year}'
|
||
|
: '01.10.${now.year - 1}'
|
||
|
: '01.04.${now.year}';
|
||
|
final validFrom = isWinter
|
||
|
? now.month != DateTime.september
|
||
|
? format.format(now)
|
||
|
: '01.10.${now.year}'
|
||
|
: now.month != DateTime.march
|
||
|
? format.format(now)
|
||
|
: '01.04.${now.year}';
|
||
|
final ending = isWinter
|
||
|
? now.month > 6
|
||
|
? '31.03.${now.year + 1}'
|
||
|
: '31.03.${now.year}'
|
||
|
: '30.09.${now.year}';
|
||
|
|
||
|
return Scaffold(
|
||
|
appBar: AppBar(
|
||
|
title: const Text('Ihre Karte'),
|
||
|
),
|
||
|
body: ListView(
|
||
|
padding:
|
||
|
const EdgeInsets.only(top: 8, bottom: 8, left: 16, right: 16),
|
||
|
children: [
|
||
|
Row(
|
||
|
crossAxisAlignment: CrossAxisAlignment.baseline,
|
||
|
textBaseline: TextBaseline.ideographic,
|
||
|
children: [
|
||
|
SvgPicture.asset('assets/RMV_logo.svg',
|
||
|
height: 16, fit: BoxFit.fitHeight),
|
||
|
Text(
|
||
|
' 01 - ${Ticket().matrikel} - 001',
|
||
|
style: TextStyle(height: 0),
|
||
|
)
|
||
|
],
|
||
|
),
|
||
|
Text('$validFrom / 00:00'),
|
||
|
Padding(
|
||
|
padding: const EdgeInsets.all(8.0),
|
||
|
child: Image.asset(Ticket().picture),
|
||
|
),
|
||
|
Text('${Ticket().vorname} ${Ticket().nachname}'),
|
||
|
const Text(
|
||
|
'Ausweis: digitaler Studierendenausweis',
|
||
|
style: TextStyle(fontSize: 12),
|
||
|
),
|
||
|
const SizedBox(height: 12),
|
||
|
const Text('RMV-HandyTicket'),
|
||
|
const Text(
|
||
|
'SemesterTicket JGU Mainz',
|
||
|
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w700),
|
||
|
),
|
||
|
const SizedBox(height: 16),
|
||
|
Row(
|
||
|
children: [
|
||
|
Column(
|
||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
children: const [
|
||
|
Text('Gültig von: '),
|
||
|
Text('Gültig bis: '),
|
||
|
Text('Semester: '),
|
||
|
Text('Ticket-ID: '),
|
||
|
],
|
||
|
),
|
||
|
Column(
|
||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
children: [
|
||
|
Text(validFrom),
|
||
|
Text(ending),
|
||
|
Text(isWinter
|
||
|
? 'WiSe ${now.month > 6 ? now.year : now.year - 1}'
|
||
|
: 'SoSe ${now.year}'),
|
||
|
Text('01 - ${Ticket().matrikel} - 001'),
|
||
|
],
|
||
|
)
|
||
|
],
|
||
|
),
|
||
|
const SizedBox(height: 8),
|
||
|
const Text(
|
||
|
'Gültig auf allen Linien im gesamten RMV Verbundnetz und den VRN-Übergangstarifgebieten. Gültig auf allen Linien im Verbundnetz des RNN inkl. ÜB AzWo. KBS 471 (Nahverkehr bis Koblenz). Es gelten die gemeinsamen Beförderungsbedingungen und Tarifbestimmungen.',
|
||
|
style: TextStyle(fontSize: 10),
|
||
|
),
|
||
|
const SizedBox(height: 4),
|
||
|
Padding(
|
||
|
padding: const EdgeInsets.only(right: 114 + 16),
|
||
|
child: SlideTransition(
|
||
|
position: Tween<Offset>(
|
||
|
begin: const Offset(0.0, 0.0),
|
||
|
end: const Offset(1.0, 0.0),
|
||
|
).animate(CurvedAnimation(
|
||
|
parent: controller,
|
||
|
curve: Curves.linear,
|
||
|
)),
|
||
|
child: Row(
|
||
|
children: [
|
||
|
SvgPicture.asset(
|
||
|
'assets/RNN_logo.svg',
|
||
|
height: 20,
|
||
|
fit: BoxFit.fitHeight,
|
||
|
),
|
||
|
const SizedBox(width: 4),
|
||
|
SvgPicture.asset(
|
||
|
'assets/RMV_logo.svg',
|
||
|
height: 16,
|
||
|
fit: BoxFit.fitHeight,
|
||
|
),
|
||
|
],
|
||
|
)),
|
||
|
),
|
||
|
const SizedBox(height: 8),
|
||
|
SizedBox(
|
||
|
height: 28,
|
||
|
child: Center(
|
||
|
child: TextButton(
|
||
|
onPressed: () {
|
||
|
Navigator.push(
|
||
|
context,
|
||
|
MaterialPageRoute(
|
||
|
builder: (context) =>
|
||
|
ShowAusweis(isWinter, now)));
|
||
|
},
|
||
|
child: const Text(
|
||
|
' Studierendenausweis ',
|
||
|
style: TextStyle(
|
||
|
color: Colors.white,
|
||
|
height: 1.0,
|
||
|
fontWeight: FontWeight.w400),
|
||
|
)),
|
||
|
),
|
||
|
),
|
||
|
Text('Gesamtlaufzeit: $beginning bis $ending',
|
||
|
style: const TextStyle(fontSize: 12))
|
||
|
]));
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
void dispose() {
|
||
|
controller.dispose();
|
||
|
super.dispose();
|
||
|
}
|
||
|
}
|