From f8100facf359ece02d5cdb15e31a314bb551fdc5 Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Tue, 30 Apr 2024 12:58:16 +0200 Subject: [PATCH] #577 und Refactoring --- lib/content_views/task_list_page.dart | 104 +++++++++++++---------- lib/content_views/tour_details_page.dart | 2 +- lib/content_views/tour_list_page.dart | 38 +++++---- 3 files changed, 81 insertions(+), 63 deletions(-) diff --git a/lib/content_views/task_list_page.dart b/lib/content_views/task_list_page.dart index bfe5194..402eddc 100644 --- a/lib/content_views/task_list_page.dart +++ b/lib/content_views/task_list_page.dart @@ -23,7 +23,6 @@ import 'package:stadtbote/protocoll_messages/fin_tour_message.dart'; import 'package:stadtbote/protocoll_messages/pic_message.dart'; import 'package:stadtbote/tools/constants.dart'; import 'package:stadtbote/tools/message_service.dart'; -import 'package:stadtbote/tools/mqtt_core.dart'; import '../main.dart'; import '../model/task_info.dart'; @@ -380,13 +379,13 @@ class _TaskListPageState extends State { }); } - void _processSignature(TaskInfo taskInfo) async { + void _processSignature(TaskInfo taskInfo) { MyApp.suppressAcceptDialog = true; SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft]); - Future.delayed(const Duration(seconds: 1), () { - showSignaturePopup(context, taskInfo, (String? signature) async { + Future.delayed(const Duration(seconds: 1), () async { + showSignaturePopup(context, taskInfo, (String? signature) { MyApp.suppressAcceptDialog = false; SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); @@ -400,52 +399,61 @@ class _TaskListPageState extends State { _sendFinTourMessage(); - await _finishTaskProcessing(taskInfo); + _finishTaskProcessing(taskInfo); - MessageService().publish(Constants.messageTopicPopContentView, arguments: PopContentViewMessage(count: widget.job.state == 1 ? 2 : 3)); + MessageService().publish(Constants.messageTopicPopContentView, arguments: PopContentViewMessage(count: 2)); } }); }); } - Future _finishTaskProcessing(TaskInfo taskInfo) async { + _finishTaskProcessing(TaskInfo taskInfo) async { + Util.logInfo('Task ${taskInfo.task.sId} finished'); + await MyApp.isarInstance.writeTxn(() async { await MyApp.isarInstance.taskInfos.put(taskInfo); }); } bool isTaskActive(int index) { - var currentTaskInfo = _taskList[index]; + if (!widget.readOnly) { + var currentTaskInfo = _taskList[index]; - if (currentTaskInfo.completed && !currentTaskInfo.task.reenter!) return false; + if (currentTaskInfo.completed && !currentTaskInfo.task.reenter!) return false; - for (var taskInfo in _taskList) - { - if (taskInfo == currentTaskInfo) break; + for (var taskInfo in _taskList) + { + if (taskInfo == currentTaskInfo) break; - if (!taskInfo.task.opt! && !taskInfo.completed) return false; + if (!taskInfo.task.opt! && !taskInfo.completed) return false; + } + + if (currentTaskInfo.task.reenter!) return true; + + return true; } - if (currentTaskInfo.task.reenter!) return true; - - return true; + return false; } _sendArrivedMessage(TaskInfo taskInfo) { - var message = FinTask(); - message.trId = widget.tour.id; - message.task = Task(); - message.task.sId = taskInfo.task.sId; - message.task.time = DateTime.now().toIso8601String(); + var finTaskMessage = FinTaskMessage(); + finTaskMessage.finTask = FinTask(); + finTaskMessage.finTask.trId = widget.tour.id; + finTaskMessage.finTask.task = Task(); + finTaskMessage.finTask.task.sId = taskInfo.task.sId; + finTaskMessage.finTask.task.time = DateTime.now().toIso8601String(); var position = MyApp.currentPosition; if (position != null) { - message.task.pos = FinTaskPos(); - message.task.pos!.lat = position.latitude; - message.task.pos!.long = position.longitude; + finTaskMessage.finTask.task.pos = FinTaskPos(); + finTaskMessage.finTask.task.pos!.lat = position.latitude; + finTaskMessage.finTask.task.pos!.long = position.longitude; + } else { + finTaskMessage.finTask.task.pos = null; } - MqttCore.instance.publishMessage("fin_task", jsonEncode(message.toJson())); + MessageService().publish(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "job", message: finTaskMessage.toJson())); } FinTourTask _createAnswerHeader(TaskInfo taskInfo) { @@ -454,49 +462,53 @@ class _TaskListPageState extends State { var finTourTask = FinTourTask(); finTourTask.sId = taskInfo.task.sId; finTourTask.time = DateTime.now().toIso8601String(); - finTourTask.pos = FinTaskPos(); if (position != null) { + finTourTask.pos = FinTaskPos(); finTourTask.pos!.lat = position.latitude; finTourTask.pos!.long = position.longitude; finTourTask.pos!.acc = position.accuracy.toInt(); + } else { + finTourTask.pos = null; } return finTourTask; } - Future _sendFinTourMessage() async { - var message = FinTour(); - message.trId = widget.tour.id; - message.com = _commisionNumber; + _sendFinTourMessage() async { + var finTourMessage = FinTourMessage(); + finTourMessage.finTour = FinTour(); + finTourMessage.finTour.trId = widget.tour.id; + finTourMessage.finTour.com = _commisionNumber; var position = MyApp.currentPosition; if (position != null) { - message.track = Track(); - message.track!.time = DateTime.now().toIso8601String(); - message.track!.pos = FinTaskPos(); - message.track!.pos!.lat = position.latitude; - message.track!.pos!.long = position.longitude; + finTourMessage.finTour.track = Track(); + finTourMessage.finTour.track!.time = DateTime.now().toIso8601String(); + finTourMessage.finTour.track!.pos = FinTaskPos(); + finTourMessage.finTour.track!.pos!.lat = position.latitude; + finTourMessage.finTour.track!.pos!.long = position.longitude; } - message.tasks = []; + finTourMessage.finTour.tasks = []; for(var taskInfo in _taskList) { if (taskInfo.answer != null) { var finTourTask = FinTourTask.fromJson(jsonDecode(taskInfo.answer!)); - message.tasks.add(finTourTask); + finTourMessage.finTour.tasks.add(finTourTask); } } - MqttCore.instance.publishMessage("fin_tour", jsonEncode(message.toJson())); + MessageService().publish(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "fin_tour", message: finTourMessage.toJson())); widget.tour.state = Constants.stateFinishedNotConfirmed; + await MyApp.isarInstance.writeTxn(() async { await MyApp.isarInstance.jobs.put(widget.job); }); _sendImages(); - checkJobFinished(); + await _checkJobFinished(); } _sendImages() { @@ -519,27 +531,25 @@ class _TaskListPageState extends State { message.pos!.long = position.longitude; } - MqttCore.instance.publishMessage("pic", jsonEncode(message.toJson())); + MessageService().publish(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "job", message: message.toJson())); } } }); } - void checkJobFinished() async { + Future _checkJobFinished() async { var jobFinished = true; - for(var tour in widget.job.tours) { - if (tour.state < 1) { + for (var tour in widget.job.tours) { + if (tour.state == 0) { jobFinished = false; + + break; } } if (jobFinished) { widget.job.state = 2; - for(var tour in widget.job.tours) { - tour.state = 1; - } - await MyApp.isarInstance.writeTxn(() async { await MyApp.isarInstance.jobs.put(widget.job); }); diff --git a/lib/content_views/tour_details_page.dart b/lib/content_views/tour_details_page.dart index a8da2bc..b31dfb9 100644 --- a/lib/content_views/tour_details_page.dart +++ b/lib/content_views/tour_details_page.dart @@ -136,7 +136,7 @@ class _TourDetailsPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Text(remark), + Expanded(child: SingleChildScrollView(child: Text(remark))), ] ), ), diff --git a/lib/content_views/tour_list_page.dart b/lib/content_views/tour_list_page.dart index ab3e6f2..1ce35c8 100644 --- a/lib/content_views/tour_list_page.dart +++ b/lib/content_views/tour_list_page.dart @@ -130,20 +130,12 @@ class _TourListPageState extends State { JobTour? lastTour; for (var tour in _tours) { - bool tourActive = false; - - if (lastTour == null) { - tourActive = true; - } else { - if (lastTour.state != 0) { - tourActive = true; - } - } + bool tourReadOnly = isTourReadOnly(lastTour, tour); Color color = Colors.transparent; switch (tour.state) { case 0: - color = tourActive ? Colors.white : Colors.grey; + color = !tourReadOnly ? Colors.white : Colors.grey; break; case 1: @@ -161,11 +153,7 @@ class _TourListPageState extends State { ListTile( contentPadding: const EdgeInsets.all(0), onTap: () { - if (tourActive) { - _clicked(tour, false); - } else { - _clicked(tour, true); - } + _clicked(tour, tourReadOnly); }, title: Container( decoration: BoxDecoration( @@ -200,6 +188,26 @@ class _TourListPageState extends State { return tourWidgets; } + bool isTourReadOnly(JobTour? lastTour, JobTour tour) { + bool readOnly; + + if (!widget.readOnly) { + readOnly = false; + + if (lastTour == null) { + readOnly = tour.state != 0; + } else { + if (lastTour.state == 0) { + readOnly = true; + } + } + } else { + readOnly = true; + } + + return readOnly; + } + void _clicked(JobTour tour, bool readOnly) { MessageService().publish(Constants.messageTopicPushContentView, arguments: TourDetailsPage(job: widget.job, tour: tour, readOnly: readOnly)); }