Erweiterungen
This commit is contained in:
1 parent
85e973c3dd
commit
fbdd2a4338
14 files changed
+296
-116
No files matched your search
@@ -1,7 +1,11 @@
|
||||
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:expandable/expandable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:mqtt_client/mqtt_client.dart';
|
||||
import 'package:stadtbote/main.dart';
|
||||
import 'package:stadtbote/protocoll_messages/accept_job_message.dart';
|
||||
import 'package:stadtbote/model/job.dart';
|
||||
@@ -17,15 +21,13 @@ import 'package:badges/badges.dart' as badges;
|
||||
import '../tools/messages/publish_payload_message.dart';
|
||||
|
||||
Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs, Function() onFinished) async {
|
||||
var jobsSet = jobs.toSet();
|
||||
|
||||
await showDialog<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsSet);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsSet);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobs);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobs);
|
||||
|
||||
Navigator.of(context).pop();
|
||||
|
||||
@@ -38,27 +40,27 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs, Function(
|
||||
shadowColor: Colors.transparent,
|
||||
backgroundColor: Colors.white,
|
||||
content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
|
||||
if (jobsSet.isEmpty) {
|
||||
if (jobs.isEmpty) {
|
||||
Navigator.of(context).pop();
|
||||
|
||||
onFinished();
|
||||
}
|
||||
|
||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsSet);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsSet);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobs);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobs);
|
||||
|
||||
MessageService().subscribe<JobDeletedMessage>(Constants.messageTopicJobDeleted, jobsSet, (jobDeletedMessage) async {
|
||||
jobsSet.removeWhere((value) => value.id == jobDeletedMessage.id);
|
||||
MessageService().subscribe<JobDeletedMessage>(Constants.messageTopicJobDeleted, jobs, (jobDeletedMessage) async {
|
||||
jobs.removeWhere((value) => value.id == jobDeletedMessage.id);
|
||||
|
||||
if (context.mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
|
||||
MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, jobsSet, (jobdMessage) async {
|
||||
jobsSet.removeWhere((value) => value.id == jobdMessage.job.id);
|
||||
MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, jobs, (jobdMessage) async {
|
||||
jobs.removeWhere((value) => value.id == jobdMessage.job.id);
|
||||
|
||||
jobsSet.add(jobdMessage.job);
|
||||
jobs.add(jobdMessage.job);
|
||||
|
||||
if (context.mounted) {
|
||||
setState(() {});
|
||||
@@ -73,9 +75,24 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs, Function(
|
||||
height: 100,
|
||||
padding: const EdgeInsets.all(5),
|
||||
child: ListView.builder(
|
||||
itemCount: jobsSet.length,
|
||||
itemCount: jobs.length,
|
||||
itemBuilder: (_, i) {
|
||||
var job = jobsSet.toList()[i];
|
||||
var job = jobs[i];
|
||||
|
||||
for (var job in jobs) {
|
||||
int enableDelay = job.delayOrderTime;
|
||||
if (job.firstDisplayTime == null) {
|
||||
MyApp.isarInstance.writeTxn(() async {
|
||||
job.firstDisplayTime = DateTime.now();
|
||||
|
||||
await MyApp.isarInstance.jobs.put(job);
|
||||
});
|
||||
} else {
|
||||
enableDelay = max(0, DateTime.now().difference(job.firstDisplayTime!).inSeconds);
|
||||
}
|
||||
|
||||
job.enableDelay = enableDelay;
|
||||
}
|
||||
|
||||
return ExpandableNotifier(
|
||||
child: ListTile(
|
||||
@@ -173,17 +190,17 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs, Function(
|
||||
() {
|
||||
_sendAnswer(job, !job.global ? 2 : 3);
|
||||
|
||||
jobsSet.removeWhere((value) => value.id == job.id);
|
||||
jobs.removeWhere((value) => value.id == job.id);
|
||||
|
||||
setState(() {});
|
||||
}),
|
||||
),
|
||||
const SizedBox(width: 20),
|
||||
Expanded(
|
||||
child: getDefaultButton('Annehmen', () {
|
||||
child: getDefaultButton('Annehmen', enabledTimerActive: job.global == false && job.enableDelay > 0, enabledTimerDelay: job.enableDelay, () {
|
||||
_sendAnswer(job, 1);
|
||||
|
||||
jobsSet.removeWhere((value) => value.id == job.id);
|
||||
jobs.removeWhere((value) => value.id == job.id);
|
||||
|
||||
setState(() {});
|
||||
}),
|
||||
@@ -217,7 +234,7 @@ _sendAnswer(Job job, int item) async {
|
||||
message.track.pos!.long = currentPosition != null ? currentPosition.longitude : 0.0;
|
||||
message.track.pos!.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
|
||||
|
||||
MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "reaction", message: message.toJson()));
|
||||
MessageService().publish<PublishPayloadMessage>(Constants.messageTopicPublishPayload, arguments: PublishPayloadMessage(topic: "reaction", message: message.toJson(), qos: MqttQos.exactlyOnce));
|
||||
|
||||
await MyApp.isarInstance.writeTxn(() async{
|
||||
await MyApp.isarInstance.jobs.delete(job.id);
|
||||
|
||||
Reference in new issue
Block a user