diff --git a/lib/content_views/main_page.dart b/lib/content_views/main_page.dart index 8df8fd0..55f169c 100644 --- a/lib/content_views/main_page.dart +++ b/lib/content_views/main_page.dart @@ -91,6 +91,12 @@ class _MainPageState extends State { _initMessages(); } + @override + void dispose() { + super.dispose(); + + _exitMessages(); + } @override Widget build(BuildContext context) { return Stack( @@ -205,7 +211,7 @@ class _MainPageState extends State { getDefaultButton( 'Abmelden', image: Image.asset('assets/abmelden.png', width: 30, height: 30), - () => {}), + () async => {showAcceptJobsPopup(context, await MyApp.isarInstance.jobs.filter().stateEqualTo(0).findAll())}), Expanded( child: Container( decoration: BoxDecoration( @@ -255,6 +261,12 @@ class _MainPageState extends State { }); } + void _exitMessages() { + BroadcastReceiver().unsubscribe(Constants.messageTopicStatusInfoUpdate); + + BroadcastReceiver().unsubscribe(Constants.messageTopicJobReceived); + } + void _refreshBadges() async { _assignedJobsValueNotifier.value = await MyApp.isarInstance.jobs.filter().stateEqualTo(0).count(); _acceptedJobsValueNotifier.value = await MyApp.isarInstance.jobs.filter().stateEqualTo(1).count(); @@ -268,7 +280,7 @@ class _MainPageState extends State { } } - void _showAcceptanceDialog(Job job) { - showAcceptJobsPopup(context); + void _showAcceptanceDialog(Job job) async { + await showAcceptJobsPopup(context, await MyApp.isarInstance.jobs.filter().stateEqualTo(0).findAll()); } } diff --git a/lib/popups/accept_jobs_popup.dart b/lib/popups/accept_jobs_popup.dart index 5520f1a..626f02c 100644 --- a/lib/popups/accept_jobs_popup.dart +++ b/lib/popups/accept_jobs_popup.dart @@ -1,8 +1,6 @@ import 'package:expandable/expandable.dart'; import 'package:flutter/material.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/protocoll_messages/accept_job_message.dart'; import 'package:stadtbote/model/job.dart'; @@ -12,156 +10,129 @@ import 'package:stadtbote/tools/mqtt_core.dart'; import 'package:stadtbote/tools/util.dart'; import 'package:badges/badges.dart' as badges; -void showAcceptJobsPopup(BuildContext context) async { - await _createListEntries().then((value) => { - showPopupWindow( - context, - //childSize:Size(240, MediaQuery.of(context).size.width * 0.8), - gravity: KumiPopupGravity.center, - //curve: Curves.elasticOut, - bgColor: Colors.grey.withOpacity(0.5), - clickOutDismiss: true, - clickBackDismiss: true, - customAnimation: false, - customPop: false, - customPage: false, - // 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(); +Future showAcceptJobsPopup(BuildContext context, List jobs) async { + var jobsSet = jobs.toSet(); - return SizedBox( - key: GlobalKey(), - height: MediaQuery.of(context).size.height * 0.85, - width: MediaQuery.of(context).size.width * 0.85, - child: Container( - height: 100, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white, - border: Border.all( - color: Colors.grey, - width: 0.5, - ), - ), - child: SingleChildScrollView(child: Column(children: value)), - )); - }, - ) - } - ); -} + await showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + contentPadding: EdgeInsets.zero, + shadowColor: Colors.transparent, + backgroundColor: Colors.white, + content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) { + if (jobsSet.isEmpty) { + Navigator.of(context).pop(); + } -// "Ablehnen" : "Ignorieren"; + return SizedBox( + key: GlobalKey(), + height: MediaQuery.of(context).size.height * 1, + width: MediaQuery.of(context).size.width * 1.2, + child: Container( + height: 100, + padding: const EdgeInsets.all(5), + child: ListView.builder( + itemCount: jobsSet.length, + itemBuilder: (_, i) { + var job = jobsSet.toList()[i]; -Future> _createListEntries() async { - List entries = []; - - var jobs = await MyApp.isarInstance.jobs.filter().stateEqualTo(0).findAll(); - for (var job in jobs) { - entries.add(ExpandableNotifier( - child: ListTile( - contentPadding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), - title: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: Constants.colorPrimary, - width: 1, - ), - ), - child: badges.Badge( - position: badges.BadgePosition.topEnd(top: -13, end: -5), - showBadge: true, - badgeContent: const Text( - 'Neu', - style: TextStyle( - color: Colors.white, - fontSize: 18.0, - ), - ), - badgeStyle: badges.BadgeStyle( - shape: badges.BadgeShape.square, - badgeColor: Constants.colorPrimary, - padding: const EdgeInsets.all(5), - borderRadius: BorderRadius.circular(5), - borderSide: const BorderSide(color: Constants.colorPrimary, width: 0), - ), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Column( - children: [ - Text(DateFormat('dd.MM.yyyy HH:mm').format(DateTime.parse(job.ordertime)).toString(), textAlign: TextAlign.left), - Text('Auftragsnummer: ${job.id}'), - Text(job.tours[0].comp), - Text(job.tours[0].street), - Text(job.tours[0].city), - const SizedBox(height: 20), - ScrollOnExpand( - scrollOnExpand: true, - scrollOnCollapse: false, - child: ExpandablePanel( - theme: const ExpandableThemeData( - headerAlignment: ExpandablePanelHeaderAlignment.center, - tapBodyToCollapse: true, - ), - header: const Padding( - padding: EdgeInsets.all(0), - child: Text( - "Weitere Infos....", - style: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.bold), - )), - collapsed: const SizedBox(), - expanded: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - height: 200, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: const Color(0xfffff4e4), - border: Border.all( - color: Colors.grey, - width: 0.5, + return ExpandableNotifier( + child: ListTile( + contentPadding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), + title: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: Constants.colorPrimary, + width: 1, + ), + ), + child: badges.Badge( + position: badges.BadgePosition.topEnd(top: -13, end: -5), + showBadge: true, + badgeContent: const Text( + 'Neu', + style: TextStyle( + color: Colors.white, + fontSize: 18.0, + ), + ), + badgeStyle: badges.BadgeStyle( + shape: badges.BadgeShape.square, + badgeColor: Constants.colorPrimary, + padding: const EdgeInsets.all(5), + borderRadius: BorderRadius.circular(5), + borderSide: const BorderSide(color: Constants.colorPrimary, width: 0), + ), + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + children: [ + Text(DateFormat('dd.MM.yyyy HH:mm').format(DateTime.parse(job.ordertime)).toString(), + textAlign: TextAlign.left), + Text('Auftragsnummer: ${job.id}'), + Text(job.tours[0].comp), + Text(job.tours[0].street), + Text(job.tours[0].city), + const SizedBox(height: 20), + ScrollOnExpand( + scrollOnExpand: true, + scrollOnCollapse: false, + child: ExpandablePanel( + theme: const ExpandableThemeData( + headerAlignment: ExpandablePanelHeaderAlignment.center, + tapBodyToCollapse: true, + ), + header: const Padding( + padding: EdgeInsets.all(0), + child: Text( + "Weitere Infos....", + style: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.bold), + )), + collapsed: const SizedBox(), + expanded: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + height: 200, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: const Color(0xfffff4e4), + border: Border.all( + color: Colors.grey, + width: 0.5, + ), + ), + child: const Text('asd asd asd asd asd asd asd asd asd asd asd asd asd asd asd '), + ), + ], + ), + ), + ), + const SizedBox(height: 20), + Row(children: [ + Expanded( + child: getDefaultButton(!job.global ? 'Ablehnen' : 'Ignorieren', + () => {_sendAnswer(job, !job.global ? 2 : 3), jobsSet.remove(job), setState(() {})}), + ), + const SizedBox(width: 20), + Expanded( + child: getDefaultButton('Annehmen', () => {_sendAnswer(job, 1), jobsSet.remove(job), setState(() {})}), + ) + ]) + ], + ), + ), ), ), - child: const Text('asd asd asd asd asd asd asd asd asd asd asd asd asd asd asd '), ), - ], - ), - ), - ), - const SizedBox(height: 20), - Row(children: [ - Expanded( - child: getDefaultButton(!job.global ? 'Ablehnen' : 'Ignorieren', () => {_sendAnswer(job, !job.global ? 2 : 3)}), - ), - const SizedBox(width: 20), - Expanded( - child: getDefaultButton('Annehmen', () => {_sendAnswer(job, 1)}), - ) - ]) - ], - ), - ), - ), - ), - ), - )); - } - - return entries; + ); + }, + )), + ); + })); + }); } _sendAnswer(Job job, int item) { diff --git a/lib/tools/mqtt_core.dart b/lib/tools/mqtt_core.dart index dc24e86..fdda5be 100644 --- a/lib/tools/mqtt_core.dart +++ b/lib/tools/mqtt_core.dart @@ -168,7 +168,7 @@ class MqttCore { break; case 'job_del': - _jobDeleteReceived(payloadData); + //_jobDeleteReceived(payloadData); break; case 'sync_request':