Fehlerkorrekturen und Erweiterungen

This commit is contained in:
Sven committed 2025-01-29 11:07:37 +01:00
1 parent 584f7dc8f7
commit 81133905de
38 files changed
+1003 -222

No files matched your search

+8 -19
View File
@@ -66,7 +66,12 @@ class _AcceptedJobsPageState extends State<AcceptedJobsPage> with ProducerMixin
List<Widget> jobWidgets = [];
for (var job in _jobs) {
String remarkString = '';
var bottomText = "${job.id}\n${job.tours[0].comp}\n${job.tours[0].street}\n${job.tours[0].city}";
// BWV
/*if (job.rem.trim().isNotEmpty) {
bottomText += "\n\n${job.rem.trim()}";
}*/
jobWidgets.add(
ListTile(
onTap: () {
@@ -85,7 +90,7 @@ class _AcceptedJobsPageState extends State<AcceptedJobsPage> with ProducerMixin
children: <Widget>[
Text(
DateFormat('dd.MM.yyyy HH:mm').format(DateTime.parse(job.ordertime).toLocal()).toString(),
style: TextStyle(backgroundColor: isJobInFuture(job) ? Colors.red : Colors.transparent),
style: TextStyle(backgroundColor: isJobTooFarInFuture(job) ? Colors.red : Colors.transparent),
textAlign: TextAlign.left,
),
Text(
@@ -102,23 +107,7 @@ class _AcceptedJobsPageState extends State<AcceptedJobsPage> with ProducerMixin
],
),
Text(
remarkString,
textAlign: TextAlign.left,
),
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,
bottomText,
textAlign: TextAlign.left,
),
],
+1 -2
View File
@@ -2,7 +2,6 @@
import 'package:dart_mq/dart_mq.dart';
import 'package:flutter/material.dart';
import 'package:isar/isar.dart';
import 'package:mqtt5_client/mqtt5_client.dart';
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
import 'package:stadtbote/main.dart';
import 'package:stadtbote/messages/pop_content_view_message.dart';
@@ -196,7 +195,7 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> with ProducerMixin,
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "set_zip", message: setPosMessage.toJson(), qos: MqttQos.exactlyOnce),
payload: PublishPayloadMessage(topic: "set_zip", message: setPosMessage.toJson(), acknowledgeRequired: false),
);
//await MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "set_zip", message: setPosMessage.toJson(), qos: MqttQos.exactlyOnce));
+8 -13
View File
@@ -3,7 +3,6 @@ import 'package:dart_mq/dart_mq.dart';
import 'package:expandable/expandable.dart';
import 'package:flutter/material.dart';
import 'package:isar/isar.dart';
import 'package:mqtt5_client/mqtt5_client.dart';
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
import 'package:intl/intl.dart';
import 'package:badges/badges.dart' as badges;
@@ -12,6 +11,7 @@ import 'package:stadtbote/protocoll_messages/accept_job_message.dart';
import 'package:stadtbote/protocoll_messages/fin_task_message.dart';
import 'package:stadtbote/tools/messages/publish_payload_message.dart';
import 'package:stadtbote/tools/messages/refresh_badges_message.dart';
import 'package:stadtbote/tools/messages/remove_state_0_job_from_map.dart';
import '../main.dart';
import '../model/job.dart';
@@ -112,7 +112,7 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> with ProducerMixin
Text(
DateFormat('dd.MM.yyyy HH:mm').format(DateTime.parse(job.ordertime).toLocal()).toString(),
textAlign: TextAlign.left,
style: TextStyle(backgroundColor: isJobInFuture(job) ? Colors.red : Colors.white),
style: TextStyle(backgroundColor: isJobTooFarInFuture(job) ? Colors.red : Colors.white),
),
Text('Auftragsnummer: ${job.id}'),
Text(job.tours[0].comp),
@@ -189,26 +189,21 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> with ProducerMixin
message.track.pos!.long = currentPosition != null ? currentPosition.longitude : 0.0;
message.track.pos!.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "reaction", message: message.toJson(), qos: MqttQos.exactlyOnce),
routingKey: Constants.messageTopicRemoveState0JobFromMap,
payload: RemoveState0JobFromMapMessage(jobId: job.id),
);
//await MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "reaction", message: message.toJson(), qos: MqttQos.exactlyOnce));
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "reaction", message: message.toJson(), acknowledgeRequired: true),
);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.jobs.delete(job.id);
});
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicUpdateBadges,
payload: RefreshBadgesMessage(),
);
//await MessageService().publish<RefreshBadgesMessage>(Constants.messageTopicUpdateBadges, arguments: RefreshBadgesMessage());
_entries = await _createListEntries();
setState(() {});
+19 -22
View File
@@ -1,7 +1,6 @@
import 'package:dart_mq/dart_mq.dart';
import 'package:flutter/material.dart';
import 'package:isar/isar.dart';
import 'package:mqtt5_client/mqtt5_client.dart';
import 'package:stadtbote/content_views/accepted_jobs_page.dart';
import 'package:stadtbote/content_views/approach_area_page.dart';
import 'package:stadtbote/content_views/assigned_jobs_page.dart';
@@ -21,6 +20,7 @@ import 'package:stadtbote/tools/messages/publish_payload_message.dart';
import 'package:stadtbote/tools/messages/connect_client_message.dart';
import 'package:stadtbote/tools/messages/disconnect_client_message.dart';
import 'package:badges/badges.dart' as badges;
import 'package:stadtbote/tools/messages/remove_state_0_job_from_map.dart';
import 'package:stadtbote/tools/util.dart';
class MainPage extends ContentViewWidget {
@@ -211,15 +211,30 @@ class _MainPageState extends State<MainPage> with ConsumerMixin, ProducerMixin {
child: getDefaultButton(
'Anfahrtsbereich',
image: Image.asset('assets/anfahrtsbereich.png', width: 30, height: 30),
() async => {
() async => {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPushContentView,
payload: const ApproachAreaPage(),
)
//await MessageService().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const ApproachAreaPage())
}),
}),
),
/*SizedBox(height: _loggedOut == true ? 0 : 20),
Visibility(
visible: !_loggedOut,
child: getDefaultButton(
'Wunschziel für heute',
image: Image.asset('assets/anfahrtsbereich.png', width: 30, height: 30),
() async => {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPushContentView,
payload: const SetDesiredZipPage(),
)
//await MessageService().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const ApproachAreaPage())
}),
),*/
SizedBox(height: _loggedOut == true ? 0 : 20),
getDefaultButton(_loggedOut ? 'Anmelden' : 'Abmelden',
image: Image.asset(_loggedOut ? 'assets/anmelden.png' : 'assets/abmelden.png', width: 30, height: 30), () async {
@@ -262,9 +277,6 @@ class _MainPageState extends State<MainPage> with ConsumerMixin, ProducerMixin {
_jobReceived((message.payload as JobReceivedMessage).job);
},
);
/*MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, this, (JobReceivedMessage jobReceivedMessage) {
_jobReceived(jobReceivedMessage.job);
});*/
subscribe(
queueId: Constants.messageTopicMessageReceived,
@@ -272,9 +284,6 @@ class _MainPageState extends State<MainPage> with ConsumerMixin, ProducerMixin {
_refreshBadges();
},
);
/*MessageService().subscribe<MessageReceivedMessage>(Constants.messageTopicMessageReceived, this, (MessageReceivedMessage mesage) {
_refreshBadges();
});*/
subscribe(
queueId: Constants.messageTopicJobDeleted,
@@ -282,9 +291,6 @@ class _MainPageState extends State<MainPage> with ConsumerMixin, ProducerMixin {
_refreshBadges();
},
);
/*MessageService().subscribe<JobDeletedMessage>(Constants.messageTopicJobDeleted, this, (JobDeletedMessage job) {
_refreshBadges();
});*/
subscribe(
queueId: Constants.messageTopicUpdateBadges,
@@ -292,9 +298,6 @@ class _MainPageState extends State<MainPage> with ConsumerMixin, ProducerMixin {
_refreshBadges();
},
);
/*MessageService().subscribe<RefreshBadgesMessage>(Constants.messageTopicUpdateBadges, this, (RefreshBadgesMessage message) {
_refreshBadges();
});*/
}
void _refreshBadges() async {
@@ -311,14 +314,11 @@ class _MainPageState extends State<MainPage> with ConsumerMixin, ProducerMixin {
if (!_loggedOut) {
showLogoutAlertDialog(context);
} else {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicConnectClient,
payload: ConnectClientMessage(),
);
//await MessageService().publish<ConnectClientMessage>(Constants.messageTopicConnectClient, arguments: ConnectClientMessage());
_loggedOut = false;
setState(() {});
@@ -338,14 +338,11 @@ class _MainPageState extends State<MainPage> with ConsumerMixin, ProducerMixin {
_loggedOut = true;
Future.delayed(const Duration(seconds: 2), () async {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicDisconnectClient,
payload: DisconnectClientMessage(),
);
//await MessageService().publish<DisconnectClientMessage>(Constants.messageTopicDisconnectClient, arguments: DisconnectClientMessage());
Future.delayed(const Duration(seconds: 3), () async {
// TODO MESSAGING
sendMessage(
@@ -404,7 +401,7 @@ class _MainPageState extends State<MainPage> with ConsumerMixin, ProducerMixin {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "logout", message: logoutMessage.toJson(), qos: MqttQos.exactlyOnce),
payload: PublishPayloadMessage(topic: "logout", message: logoutMessage.toJson(), acknowledgeRequired: false),
);
//await MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "logout", message: logoutMessage.toJson(), qos: MqttQos.exactlyOnce));
+27 -5
View File
@@ -4,13 +4,13 @@ import 'package:flutter/material.dart';
import 'package:flutter_chat_ui/flutter_chat_ui.dart';
import 'package:flutter_chat_types/flutter_chat_types.dart' as types;
import 'package:isar/isar.dart';
import 'package:mqtt5_client/mqtt5_client.dart';
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
import 'package:stadtbote/main.dart';
import 'package:stadtbote/messages/pop_content_view_message.dart';
import 'package:stadtbote/model/chat_message.dart' as sbmessage;
import 'package:stadtbote/model/chat_message.dart';
import 'package:stadtbote/model/session_status.dart';
import 'package:stadtbote/protocoll_messages/messages_showed.dart';
import 'package:stadtbote/tools/constants.dart';
import 'package:stadtbote/tools/messages/publish_payload_message.dart';
@@ -53,6 +53,8 @@ class _MessagesPageState extends State<MessagesPage> with ProducerMixin {
var status = await MyApp.isarInstance.sessionStatus.where().findFirst();
_sid = status != null ? status.sid : 'Unbekannt';
_sendMessagesReceivedMessage();
await _fetchMessages();
_initCompleted = true;
@@ -99,14 +101,11 @@ class _MessagesPageState extends State<MessagesPage> with ProducerMixin {
await MyApp.isarInstance.chatMessages.put(message);
});
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "message", message: message.toJson(), qos: MqttQos.exactlyOnce),
payload: PublishPayloadMessage(topic: "message", message: message.toJson(), acknowledgeRequired: true),
);
//await MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "message", message: message.toJson(), qos: MqttQos.exactlyOnce));
_messages.insert(0, types.TextMessage(
author: _user,
createdAt: now.millisecondsSinceEpoch,
@@ -191,6 +190,29 @@ class _MessagesPageState extends State<MessagesPage> with ProducerMixin {
);
});
}
void _sendMessagesReceivedMessage() async {
var unreadChatMessages = await MyApp.isarInstance.chatMessages
.filter()
.readEqualTo(false)
.findAll();
if (unreadChatMessages.isNotEmpty) {
List<String> chatMessageIds = [];
for(var message in unreadChatMessages) {
chatMessageIds.add(message.id.toString());
}
var chatMessagesReceived = ChatMessagesReceived();
chatMessagesReceived.ids = chatMessageIds;
chatMessagesReceived.time = DateTime.now().toUtc().toIso8601String();
sendMessage(
routingKey: Constants.messageTopicChatMessagesReceived,
payload: chatMessagesReceived,
);
}
}
}
class _HeaderWidget extends StatefulWidget {
+184
View File
@@ -0,0 +1,184 @@
import 'package:dart_mq/dart_mq.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
import 'package:stadtbote/messages/pop_content_view_message.dart';
import 'package:stadtbote/protocoll_messages/set_desired_zip_message.dart';
import 'package:stadtbote/tools/messages/publish_payload_message.dart';
import '../tools/constants.dart';
import '../tools/util.dart';
class SetDesiredZipPage extends ContentViewWidget {
const SetDesiredZipPage({super.key});
@override
State<SetDesiredZipPage> createState() => _SetDesiredZipPageState();
@override
Future<Widget> getHeaderWidget(BuildContext context) async {
await Future.delayed(const Duration(microseconds: 0));
return _HeaderWidget();
}
}
class _SetDesiredZipPageState extends State<SetDesiredZipPage> with ProducerMixin {
TextEditingController textEditController = TextEditingController();
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children:
[
const Text("Bitte geben Sie Ihr Wunschziel für heute ein"),
const SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center, // Zentriert das Textfeld horizontal
children: [
SizedBox(
width: 120, // Festlegen der Breite des Textfelds
child:
Util.getDefaultTextField('PLZ',
textInputType: TextInputType.text,
formatter: [FilteringTextInputFormatter.singleLineFormatter],
controller: textEditController,
maxLength: 5,
autofocus: true
),
),
],
),
const SizedBox(height: 20),
getDefaultButton('Übernehmen', () =>
{
Util.preferencesSaveString(Constants.prefsDesiredZip, textEditController.text),
_sendDesiredZipMessage(textEditController.text),
sendMessage(
routingKey: Constants.messageTopicPopContentView,
payload: PopContentViewMessage(count: 1),
)
})
]
),
);
}
_sendDesiredZipMessage(String desiredZip) {
var desiredZipMessage = SetDesiredZipMessage();
desiredZipMessage.desiredZip = desiredZip;
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "set_desired_zip", message: desiredZipMessage.toJson(),acknowledgeRequired: true),
);
}
}
class _HeaderWidget extends StatefulWidget {
@override
State<_HeaderWidget> createState() => _HeaderWidgetState();
}
class _HeaderWidgetState extends State<_HeaderWidget> with ProducerMixin {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
var cellWidth = (MediaQuery.of(context).size.width - 60 - 60 - 25) / 2;
return Padding(
padding: const EdgeInsets.all(8),
child: Stack(
alignment: Alignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Visibility(
visible: true,
child: Container(
width: 60,
height: 60,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.white,
),
child: FittedBox(
child: GestureDetector(
onTap: () async {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPopContentView,
payload: PopContentViewMessage(count: 1),
);
//await MessageService().publish<PopContentViewMessage>(Constants.messageTopicPopContentView, arguments: PopContentViewMessage(count: 1));
},
child: const CircleAvatar(
radius: 10,
backgroundColor: Constants.colorPrimary,
child: Padding(padding: EdgeInsets.all(1.0), child: Icon(Icons.arrow_back, size: 20.0, color: Colors.white)),
),
),
),
),
),
Visibility(
visible: false,
child: Container(
width: 60,
height: 60,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
child: FittedBox(
child: GestureDetector(
onTap: () async {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPopContentView,
payload: PopContentViewMessage(count: 1),
);
//await MessageService().publish<PopContentViewMessage>(Constants.messageTopicPopContentView, arguments: PopContentViewMessage(count: 1));
},
child: const CircleAvatar(
backgroundColor: Constants.colorPrimary,
radius: 10,
child: Padding(padding: EdgeInsets.all(1.0), child: Icon(Icons.info_outline, size: 20.0, color: Colors.white))),
),
),
),
),
],
),
SizedBox(
height: 100,
width: cellWidth * 2,
child: const Center(
child: Text(
textAlign: TextAlign.center,
"Wunschziel für heute",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18, color: Colors.white),
),
),
),
],
),
);
}
}
+5 -5
View File
@@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
import 'package:isar/isar.dart';
import 'package:mqtt5_client/mqtt5_client.dart';
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
import 'package:stadtbote/messages/pop_content_view_message.dart';
import 'package:stadtbote/model/job.dart';
@@ -361,8 +360,9 @@ class _TaskListPageState extends State<TaskListPage> with ProducerMixin {
void _processReceiptGiver(TaskInfo taskInfo) {
Util.logInfo('Task ${taskInfo.task.sId} called');
showReceiptGiverPopup(context, taskInfo, (receiptGiver) {
showReceiptGiverPopup(context, taskInfo, (receiptGiver, selectedTourEntry) {
var answer = _createAnswerHeader(taskInfo);
answer.code = selectedTourEntry.code;
answer.val = receiptGiver;
taskInfo.answer = jsonEncode(answer.toJson());
@@ -480,7 +480,7 @@ class _TaskListPageState extends State<TaskListPage> with ProducerMixin {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "fin_task", message: message.toJson(), qos: MqttQos.exactlyOnce),
payload: PublishPayloadMessage(topic: "fin_task", message: message.toJson(), acknowledgeRequired: true),
);
//await MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "fin_task", message: message.toJson(), qos: MqttQos.exactlyOnce));
@@ -530,7 +530,7 @@ class _TaskListPageState extends State<TaskListPage> with ProducerMixin {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "fin_tour", message: finTourMessage.toJson(), qos: MqttQos.exactlyOnce),
payload: PublishPayloadMessage(topic: "fin_tour", message: finTourMessage.toJson(), acknowledgeRequired: true),
);
//await MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "fin_tour", message: finTourMessage.toJson(), qos: MqttQos.exactlyOnce));
@@ -561,7 +561,7 @@ class _TaskListPageState extends State<TaskListPage> with ProducerMixin {
// TODO MESSAGING
sendMessage(
routingKey: Constants.messageTopicPublishPayload,
payload: PublishPayloadMessage(topic: "pic", message: message.toJson(), qos: MqttQos.exactlyOnce),
payload: PublishPayloadMessage(topic: "pic", message: message.toJson(), acknowledgeRequired: true),
);
//await MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "pic", message: message.toJson(), qos: MqttQos.exactlyOnce));