import 'package:flutter/material.dart'; import 'package:stadtbote/content_views/tour_details_page.dart'; import 'package:stadtbote/content_views/utils/content_view_widget.dart'; import 'package:stadtbote/content_views/utils/header_info.dart'; import 'package:stadtbote/model/job_tour.dart'; import 'package:stadtbote/popups/map_popup.dart'; import 'package:stadtbote/tools/message_service.dart'; import '../model/job.dart'; import '../tools/constants.dart'; import '../tools/util.dart'; class TourListPage extends ContentViewWidget { const TourListPage({super.key, required this.job, this.readOnly = false}); final Job job; final bool readOnly; @override State createState() => _TourListPageState(); @override Future getHeaderInfo(BuildContext context) async { return HeaderInfo( titleWidget: const Text( 'Liste der Stationen', style: TextStyle( color: Colors.white, fontSize: 20.0, ), ), rightButtonEnabled: true, rightButtonVisible: true, rightButtonImage: Util.fetchFutureIcon(const Icon(Icons.help_outline, size: 20.0, color: Colors.white)), rightButtonOnPressed: () async { await Util.startBrowser('https://app.assecutor.de/help/sb/app/context/004/index.html'); }); } } class _TourListPageState extends State { late List _tours; late bool _initCompleted = false; @override void initState() { Future.delayed(const Duration(seconds: 0), () async { _tours = widget.job.tours; _initCompleted = true; setState(() {}); }); super.initState(); } @override Widget build(BuildContext context) { if (!_initCompleted) { return Util.getWaitWidget(context); } late List jobWidgets = _createTourWidgets(); return Padding( padding: const EdgeInsets.all(18.0), child: Column( children: [ Container( color: Colors.transparent, child: Row( children: [ Text( widget.job.id.toString(), textAlign: TextAlign.left, ), ], ), ), Row( children: [ Text( widget.job.crFilter != null ? widget.job.crFilter.toString() : "", textAlign: TextAlign.left, ), ], ), Row( children: [ Image.asset("assets/${mapVehicleTypeToImageName(widget.job.vhtId)}", width: 60, height: 60), const SizedBox(width: 10), Expanded( child: Text(mapVehicleTypeToText(widget.job.vhtId)), ), const SizedBox(width: 10), SizedBox( width: 100, child: Visibility( visible: widget.job.tours[0].pos != null, child: ElevatedButton( style: ButtonStyle( shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), side: const BorderSide(color: Colors.grey), ), ), backgroundColor: MaterialStateProperty.all(Colors.lightGreen), foregroundColor: MaterialStateProperty.all(Colors.black), ), onPressed: () => {showMapPopup(context, widget.job.tours[0], widget.job.tours)}, child: const Text("Karte")), )) ], ), Expanded( child: ListView(padding: const EdgeInsets.all(0), children: jobWidgets), ) ], ), ); } List _createTourWidgets() { List tourWidgets = []; JobTour? lastTour; for (var tour in _tours) { bool tourActive = false; if (lastTour == null) { tourActive = true; } else { if (lastTour.state != 0) { tourActive = true; } } Color color = Colors.transparent; switch (tour.state) { case 0: color = tourActive ? Colors.white : Colors.grey; break; case 1: color = Colors.lightGreen; break; default: color = Colors.yellow; break; } lastTour = tour; tourWidgets.add( ListTile( contentPadding: const EdgeInsets.all(0), onTap: () { if (tourActive) { _clicked(tour); } }, title: Container( decoration: BoxDecoration( border: Border.all(color: Colors.grey, width: 0.5), color: color, borderRadius: const BorderRadius.all(Radius.circular(13))), padding: const EdgeInsets.all(5.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "${"Station ${tour.sort}"} ${mapTourMode(tour.mode)}", textAlign: TextAlign.left, ), Text( tour.comp, textAlign: TextAlign.left, ), Text( tour.street, textAlign: TextAlign.left, ), Text( tour.city, textAlign: TextAlign.left, ), ], ), )), ); } return tourWidgets; } void _clicked(JobTour tour) { MessageService().publish(Constants.messageTopicPushContentView, arguments: TourDetailsPage(job: widget.job, tour: tour, readOnly: tour.state != 0)); } }