From b7d45efecc0408eb0c5a9508a955e23e16841d1b Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Sat, 3 Feb 2024 11:42:48 +0100 Subject: [PATCH] Erweiterungen --- lib/content_views/finished_jobs_page.dart | 129 ++++++++++++++++------ lib/content_views/main_page.dart | 2 +- lib/content_views/task_list_page.dart | 13 ++- lib/content_views/tour_details_page.dart | 7 +- lib/content_views/tour_list_page.dart | 6 +- 5 files changed, 117 insertions(+), 40 deletions(-) diff --git a/lib/content_views/finished_jobs_page.dart b/lib/content_views/finished_jobs_page.dart index 617b2c9..bfe94a8 100644 --- a/lib/content_views/finished_jobs_page.dart +++ b/lib/content_views/finished_jobs_page.dart @@ -1,6 +1,15 @@ import 'package:flutter/material.dart'; +import 'package:flutter_broadcast_receiver/flutter_broadcast_receiver.dart'; +import 'package:isar/isar.dart'; +import 'package:stadtbote/content_views/tour_list_page.dart'; import 'package:stadtbote/content_views/utils/content_view_widget.dart'; import 'package:stadtbote/content_views/utils/header_info.dart'; +import 'package:intl/intl.dart'; + +import '../main.dart'; +import '../model/job.dart'; +import '../tools/constants.dart'; +import '../tools/util.dart'; class FinishedJobsPage extends ContentViewWidget { const FinishedJobsPage({super.key}); @@ -12,7 +21,7 @@ class FinishedJobsPage extends ContentViewWidget { Future getHeaderInfo(BuildContext context) async { return HeaderInfo( titleWidget: const Text( - 'Startseite', + 'Erledigte Aufträge', style: TextStyle( color: Colors.white, fontSize: 24.0, @@ -28,42 +37,100 @@ class FinishedJobsPage extends ContentViewWidget { } class _FinishedJobsPageState extends State { - void sendMessage(Widget message) { - //Messaging.instance.sendMessage(message); - } + late List _jobs; - void _clicked() { - //sendMessage(const InfoDetailsWidget()); + late bool _initCompleted = false; + + @override + void initState() { + Future.delayed(const Duration(seconds: 0), () async { + _jobs = await MyApp.isarInstance.jobs.filter().stateEqualTo(2).findAll(); + + _initCompleted = true; + + setState(() {}); + }); + + super.initState(); } @override Widget build(BuildContext context) { + if (!_initCompleted) { + return Util.getWaitWidget(context); + } + + late List jobWidgets = _createjobWidgets(); + return ListView( - children: [ - ListTile( - title: const Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Dies ist ein linksbündigerText', - textAlign: TextAlign.left, - ), - Text( - 'Dies ist ein linksbündiger Text', - textAlign: TextAlign.left, - style: TextStyle( - color: Colors.blue, - fontSize: 24.0, - ), - ), - ], - ), - onTap: () { - _clicked(); - }, - ), - ], + children: jobWidgets ); } + + List _createjobWidgets() { + List jobWidgets = []; + + for (var job in _jobs) { + jobWidgets.add( + ListTile( + onTap: () { + _clicked(job); + }, + title: Container( + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.grey, width: 0.5), + borderRadius: const BorderRadius.all(Radius.circular(13)) + ), + padding: const EdgeInsets.all(15.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + DateFormat('dd.MM.yyyy HH:mm').format(DateTime.parse(job.ordertime)).toString(), + textAlign: TextAlign.left, + ), + Text( + job.crFilter != null ? job.crFilter.toString() : "", + textAlign: TextAlign.left, + ), + Row( + children: [ + Image.asset("assets/${mapVehicleTypeToImageName(job.vhtId)}", width: 60, height: 60), + const SizedBox(width: 10), + Text( + mapVehicleTypeToText(job.vhtId) + ), + ], + ), + Text( + job.id.toString(), + textAlign: TextAlign.left, + ), + Text( + job.tours[0].comp, + textAlign: TextAlign.left, + ), + Text( + job.tours[0].street, + textAlign: TextAlign.left, + ), + Text( + job.tours[0].city, + textAlign: TextAlign.left, + ), + ], + ), + ) + ), + ); + } + + return jobWidgets; + } + + void _clicked(Job job) { + BroadcastReceiver().publish(Constants.messageTopicPushContentView, arguments: TourListPage(job: job, readOnly: true,)); + } } diff --git a/lib/content_views/main_page.dart b/lib/content_views/main_page.dart index 7910f61..8df8fd0 100644 --- a/lib/content_views/main_page.dart +++ b/lib/content_views/main_page.dart @@ -205,7 +205,7 @@ class _MainPageState extends State { getDefaultButton( 'Abmelden', image: Image.asset('assets/abmelden.png', width: 30, height: 30), - () => {BroadcastReceiver().publish(Constants.messageTopicPushContentView, arguments: const FinishedJobsPage())}), + () => {}), Expanded( child: Container( decoration: BoxDecoration( diff --git a/lib/content_views/task_list_page.dart b/lib/content_views/task_list_page.dart index 6c536bb..21124d8 100644 --- a/lib/content_views/task_list_page.dart +++ b/lib/content_views/task_list_page.dart @@ -21,10 +21,12 @@ import '../model/task_info.dart'; import '../tools/util.dart'; class TaskListPage extends ContentViewWidget { - const TaskListPage({super.key, required this.tour}); + const TaskListPage({super.key, required this.tour, this.readOnly = false}); final JobTour tour; + final bool readOnly; + @override State createState() => _TaskListPageState(); @@ -80,9 +82,12 @@ class _TaskListPageState extends State { child: SingleChildScrollView( scrollDirection: Axis.vertical, padding: const EdgeInsets.all(0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: steps, + child: AbsorbPointer( + absorbing: widget.readOnly, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: steps, + ), ), ), ); diff --git a/lib/content_views/tour_details_page.dart b/lib/content_views/tour_details_page.dart index a07215b..18b2c5f 100644 --- a/lib/content_views/tour_details_page.dart +++ b/lib/content_views/tour_details_page.dart @@ -11,11 +11,14 @@ import '../tools/constants.dart'; import '../tools/util.dart'; class TourDetailsPage extends ContentViewWidget { - const TourDetailsPage({super.key, required this.job, required this.tour}); + const TourDetailsPage({super.key, required this.job, required this.tour, this.readOnly = false}); final Job job; final JobTour tour; + final bool readOnly; + + @override State createState() => _TourDetailsPageState(); @@ -139,7 +142,7 @@ class _TourDetailsPageState extends State { const SizedBox(height: 10), getDefaultButton('Weiter', () => { - BroadcastReceiver().publish(Constants.messageTopicPushContentView, arguments: TaskListPage(tour: widget.tour)) + BroadcastReceiver().publish(Constants.messageTopicPushContentView, arguments: TaskListPage(tour: widget.tour, readOnly: widget.readOnly)) }), ], ), diff --git a/lib/content_views/tour_list_page.dart b/lib/content_views/tour_list_page.dart index 41e582b..0f36b5d 100644 --- a/lib/content_views/tour_list_page.dart +++ b/lib/content_views/tour_list_page.dart @@ -11,10 +11,12 @@ import '../tools/constants.dart'; import '../tools/util.dart'; class TourListPage extends ContentViewWidget { - const TourListPage({super.key, required this.job}); + const TourListPage({super.key, required this.job, this.readOnly = false}); final Job job; + final bool readOnly; + @override State createState() => _TourListPageState(); @@ -192,7 +194,7 @@ class _TourListPageState extends State { void _clicked(JobTour tour) { if (tour.state == 0) { - BroadcastReceiver().publish(Constants.messageTopicPushContentView, arguments: TourDetailsPage(job: widget.job, tour: tour)); + BroadcastReceiver().publish(Constants.messageTopicPushContentView, arguments: TourDetailsPage(job: widget.job, tour: tour, readOnly: widget.readOnly)); } } }