Erweiterungen

This commit is contained in:
Sven committed 2024-02-05 12:47:29 +01:00
1 parent ab86295bd5
commit d0892e552e
3 files changed
+49 -66

No files matched your search

+15 -3
View File
@@ -91,6 +91,12 @@ class _MainPageState extends State<MainPage> {
_initMessages(); _initMessages();
} }
@override
void dispose() {
super.dispose();
_exitMessages();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Stack( return Stack(
@@ -205,7 +211,7 @@ class _MainPageState extends State<MainPage> {
getDefaultButton( getDefaultButton(
'Abmelden', 'Abmelden',
image: Image.asset('assets/abmelden.png', width: 30, height: 30), image: Image.asset('assets/abmelden.png', width: 30, height: 30),
() => {}), () async => {showAcceptJobsPopup(context, await MyApp.isarInstance.jobs.filter().stateEqualTo(0).findAll())}),
Expanded( Expanded(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
@@ -255,6 +261,12 @@ class _MainPageState extends State<MainPage> {
}); });
} }
void _exitMessages() {
BroadcastReceiver().unsubscribe<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate);
BroadcastReceiver().unsubscribe<StatusInfoUpdate>(Constants.messageTopicJobReceived);
}
void _refreshBadges() async { void _refreshBadges() async {
_assignedJobsValueNotifier.value = await MyApp.isarInstance.jobs.filter().stateEqualTo(0).count(); _assignedJobsValueNotifier.value = await MyApp.isarInstance.jobs.filter().stateEqualTo(0).count();
_acceptedJobsValueNotifier.value = await MyApp.isarInstance.jobs.filter().stateEqualTo(1).count(); _acceptedJobsValueNotifier.value = await MyApp.isarInstance.jobs.filter().stateEqualTo(1).count();
@@ -268,7 +280,7 @@ class _MainPageState extends State<MainPage> {
} }
} }
void _showAcceptanceDialog(Job job) { void _showAcceptanceDialog(Job job) async {
showAcceptJobsPopup(context); await showAcceptJobsPopup(context, await MyApp.isarInstance.jobs.filter().stateEqualTo(0).findAll());
} }
} }
+33 -62
View File
@@ -1,8 +1,6 @@
import 'package:expandable/expandable.dart'; import 'package:expandable/expandable.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:isar/isar.dart';
import 'package:kumi_popup_window/kumi_popup_window.dart';
import 'package:stadtbote/main.dart'; import 'package:stadtbote/main.dart';
import 'package:stadtbote/protocoll_messages/accept_job_message.dart'; import 'package:stadtbote/protocoll_messages/accept_job_message.dart';
import 'package:stadtbote/model/job.dart'; import 'package:stadtbote/model/job.dart';
@@ -12,65 +10,34 @@ import 'package:stadtbote/tools/mqtt_core.dart';
import 'package:stadtbote/tools/util.dart'; import 'package:stadtbote/tools/util.dart';
import 'package:badges/badges.dart' as badges; import 'package:badges/badges.dart' as badges;
void showAcceptJobsPopup(BuildContext context) async { Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
await _createListEntries().then((value) => { var jobsSet = jobs.toSet();
showPopupWindow(
context, await showDialog<void>(
//childSize:Size(240, MediaQuery.of(context).size.width * 0.8), context: context,
gravity: KumiPopupGravity.center, builder: (BuildContext context) {
//curve: Curves.elasticOut, return AlertDialog(
bgColor: Colors.grey.withOpacity(0.5), contentPadding: EdgeInsets.zero,
clickOutDismiss: true, shadowColor: Colors.transparent,
clickBackDismiss: true, backgroundColor: Colors.white,
customAnimation: false, content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
customPop: false, if (jobsSet.isEmpty) {
customPage: false, Navigator.of(context).pop();
// targetRenderBox: (btnKey.currentContext.findRenderObject() as RenderBox), }
//needSafeDisplay: true,
underStatusBar: false,
underAppBar: false,
//offsetX: -180,
//offsetY: 50,
duration: const Duration(milliseconds: 200),
onShowStart: (pop) {},
onShowFinish: (pop) {},
onDismissStart: (pop) {},
onDismissFinish: (pop) {},
onClickOut: (pop) {},
onClickBack: (pop) {},
childFun: (pop) {
_createListEntries();
return SizedBox( return SizedBox(
key: GlobalKey(), key: GlobalKey(),
height: MediaQuery.of(context).size.height * 0.85, height: MediaQuery.of(context).size.height * 1,
width: MediaQuery.of(context).size.width * 0.85, width: MediaQuery.of(context).size.width * 1.2,
child: Container( child: Container(
height: 100, height: 100,
decoration: BoxDecoration( padding: const EdgeInsets.all(5),
borderRadius: BorderRadius.circular(10), child: ListView.builder(
color: Colors.white, itemCount: jobsSet.length,
border: Border.all( itemBuilder: (_, i) {
color: Colors.grey, var job = jobsSet.toList()[i];
width: 0.5,
),
),
child: SingleChildScrollView(child: Column(children: value)),
));
},
)
}
);
}
// "Ablehnen" : "Ignorieren"; return ExpandableNotifier(
Future<List<Widget>> _createListEntries() async {
List<Widget> entries = [];
var jobs = await MyApp.isarInstance.jobs.filter().stateEqualTo(0).findAll();
for (var job in jobs) {
entries.add(ExpandableNotifier(
child: ListTile( child: ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), contentPadding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
title: Container( title: Container(
@@ -102,7 +69,8 @@ Future<List<Widget>> _createListEntries() async {
padding: const EdgeInsets.all(12.0), padding: const EdgeInsets.all(12.0),
child: Column( child: Column(
children: [ children: [
Text(DateFormat('dd.MM.yyyy HH:mm').format(DateTime.parse(job.ordertime)).toString(), textAlign: TextAlign.left), Text(DateFormat('dd.MM.yyyy HH:mm').format(DateTime.parse(job.ordertime)).toString(),
textAlign: TextAlign.left),
Text('Auftragsnummer: ${job.id}'), Text('Auftragsnummer: ${job.id}'),
Text(job.tours[0].comp), Text(job.tours[0].comp),
Text(job.tours[0].street), Text(job.tours[0].street),
@@ -145,11 +113,12 @@ Future<List<Widget>> _createListEntries() async {
const SizedBox(height: 20), const SizedBox(height: 20),
Row(children: [ Row(children: [
Expanded( Expanded(
child: getDefaultButton(!job.global ? 'Ablehnen' : 'Ignorieren', () => {_sendAnswer(job, !job.global ? 2 : 3)}), child: getDefaultButton(!job.global ? 'Ablehnen' : 'Ignorieren',
() => {_sendAnswer(job, !job.global ? 2 : 3), jobsSet.remove(job), setState(() {})}),
), ),
const SizedBox(width: 20), const SizedBox(width: 20),
Expanded( Expanded(
child: getDefaultButton('Annehmen', () => {_sendAnswer(job, 1)}), child: getDefaultButton('Annehmen', () => {_sendAnswer(job, 1), jobsSet.remove(job), setState(() {})}),
) )
]) ])
], ],
@@ -158,10 +127,12 @@ Future<List<Widget>> _createListEntries() async {
), ),
), ),
), ),
)); );
} },
)),
return entries; );
}));
});
} }
_sendAnswer(Job job, int item) { _sendAnswer(Job job, int item) {
+1 -1
View File
@@ -168,7 +168,7 @@ class MqttCore {
break; break;
case 'job_del': case 'job_del':
_jobDeleteReceived(payloadData); //_jobDeleteReceived(payloadData);
break; break;
case 'sync_request': case 'sync_request':