Erweiterungen
This commit is contained in:
1 parent
e0d66ce3b1
commit
5c095fb969
10 files changed
+501
-409
No files matched your search
-343
@@ -1,343 +0,0 @@
|
|||||||
{
|
|
||||||
"recv": "sb",
|
|
||||||
"id": "0",
|
|
||||||
"payload": {
|
|
||||||
"jobs": [
|
|
||||||
{
|
|
||||||
"id": 21084648,
|
|
||||||
"ver": 1685440133,
|
|
||||||
"state": 1,
|
|
||||||
"ordertime": "2023-05-30T07:51Z",
|
|
||||||
"offs_warn": 15,
|
|
||||||
"global": false,
|
|
||||||
"vht_id": 3,
|
|
||||||
"rem": [
|
|
||||||
"Fuhrlohn: 41,70 EUR",
|
|
||||||
"Filter: SK",
|
|
||||||
"-------------------",
|
|
||||||
"30625 Hannover",
|
|
||||||
"30161 Hannover",
|
|
||||||
"30625 Hannover",
|
|
||||||
"30161 Hannover"
|
|
||||||
],
|
|
||||||
"tours": [
|
|
||||||
{
|
|
||||||
"id": 19002821,
|
|
||||||
"sort": 1,
|
|
||||||
"state": 1,
|
|
||||||
"mode": "pu",
|
|
||||||
"comp": "GHOTEL",
|
|
||||||
"person": "",
|
|
||||||
"phone": "040 000000",
|
|
||||||
"street": "Lathusenstr. 35",
|
|
||||||
"city": "30625 Hannover",
|
|
||||||
"com": "",
|
|
||||||
"pos": {
|
|
||||||
"lat": 52.3799,
|
|
||||||
"long": 9.79572
|
|
||||||
},
|
|
||||||
"rem": [],
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"s_id": 1900282100,
|
|
||||||
"type": 3,
|
|
||||||
"topic": "Ankunft bestätigen",
|
|
||||||
"rt": true,
|
|
||||||
"track": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282101,
|
|
||||||
"type": 9,
|
|
||||||
"topic": "Kommissionsnummer",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282102,
|
|
||||||
"type": 5,
|
|
||||||
"topic": "Barcodes scannen",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true,
|
|
||||||
"min": 0,
|
|
||||||
"max": 4,
|
|
||||||
"max_len": 30
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282103,
|
|
||||||
"type": 4,
|
|
||||||
"topic": "Fotos",
|
|
||||||
"opt": false,
|
|
||||||
"reenter": false,
|
|
||||||
"min": 1,
|
|
||||||
"max": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282104,
|
|
||||||
"type": 3,
|
|
||||||
"topic": "Arbeit fertig",
|
|
||||||
"track": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282105,
|
|
||||||
"type": 8,
|
|
||||||
"topic": "Hinweis zur Station",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282106,
|
|
||||||
"type": 7,
|
|
||||||
"topic": "Quittungsgeber"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282107,
|
|
||||||
"type": 2,
|
|
||||||
"topic": "Unterschrift",
|
|
||||||
"txt": [
|
|
||||||
"%comp% / %person%",
|
|
||||||
"%street%, %city%",
|
|
||||||
"Komm-#: %com%",
|
|
||||||
"Servicezeit: %service_time%",
|
|
||||||
"Quittungsgeber: %task_val#1900282106%"
|
|
||||||
],
|
|
||||||
"term": true,
|
|
||||||
"task_arrival": 1900282100,
|
|
||||||
"task_fin_work": 1900282104
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 19002822,
|
|
||||||
"sort": 2,
|
|
||||||
"state": 1,
|
|
||||||
"mode": "pu/del",
|
|
||||||
"comp": "KURS-Institut fuer betriebliche",
|
|
||||||
"person": "Herr Rosenthal 51516525",
|
|
||||||
"phone": "05115151650",
|
|
||||||
"street": "Roscherstr. 13a",
|
|
||||||
"city": "30161 Hannover",
|
|
||||||
"com": "",
|
|
||||||
"pos": {
|
|
||||||
"lat": 52.3775,
|
|
||||||
"long": 9.7475
|
|
||||||
},
|
|
||||||
"rem": [],
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"s_id": 1900282200,
|
|
||||||
"type": 3,
|
|
||||||
"topic": "Ankunft bestätigen",
|
|
||||||
"rt": true,
|
|
||||||
"track": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282201,
|
|
||||||
"type": 9,
|
|
||||||
"topic": "Kommissionsnummer",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282202,
|
|
||||||
"type": 5,
|
|
||||||
"topic": "Barcodes scannen",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true,
|
|
||||||
"min": 0,
|
|
||||||
"max": 4,
|
|
||||||
"max_len": 30
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282203,
|
|
||||||
"type": 3,
|
|
||||||
"topic": "Arbeit fertig",
|
|
||||||
"track": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282204,
|
|
||||||
"type": 8,
|
|
||||||
"topic": "Hinweis zur Station",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282205,
|
|
||||||
"type": 7,
|
|
||||||
"topic": "Quittungsgeber"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900282206,
|
|
||||||
"type": 2,
|
|
||||||
"topic": "Unterschrift",
|
|
||||||
"txt": [
|
|
||||||
"%comp% / %person%",
|
|
||||||
"%street%, %city%",
|
|
||||||
"Komm-#: %com%",
|
|
||||||
"Servicezeit: %service_time%",
|
|
||||||
"Quittungsgeber: %task_val#1900282205%"
|
|
||||||
],
|
|
||||||
"term": true,
|
|
||||||
"task_arrival": 1900282200,
|
|
||||||
"task_fin_work": 1900282203
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 19003721,
|
|
||||||
"sort": 3,
|
|
||||||
"state": 1,
|
|
||||||
"mode": "del",
|
|
||||||
"comp": "GHOTEL",
|
|
||||||
"person": "",
|
|
||||||
"phone": "040 000000",
|
|
||||||
"street": "Lathusenstr. 35",
|
|
||||||
"city": "30625 Hannover",
|
|
||||||
"com": "",
|
|
||||||
"pos": {
|
|
||||||
"lat": 52.3799,
|
|
||||||
"long": 9.79572
|
|
||||||
},
|
|
||||||
"rem": [],
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"s_id": 1900372100,
|
|
||||||
"type": 3,
|
|
||||||
"topic": "Ankunft bestätigen",
|
|
||||||
"rt": true,
|
|
||||||
"track": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372101,
|
|
||||||
"type": 9,
|
|
||||||
"topic": "Kommissionsnummer",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372102,
|
|
||||||
"type": 5,
|
|
||||||
"topic": "Barcodes scannen",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true,
|
|
||||||
"min": 0,
|
|
||||||
"max": 4,
|
|
||||||
"max_len": 30
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372103,
|
|
||||||
"type": 3,
|
|
||||||
"topic": "Arbeit fertig",
|
|
||||||
"track": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372104,
|
|
||||||
"type": 8,
|
|
||||||
"topic": "Hinweis zur Station",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372105,
|
|
||||||
"type": 7,
|
|
||||||
"topic": "Quittungsgeber"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372106,
|
|
||||||
"type": 2,
|
|
||||||
"topic": "Unterschrift",
|
|
||||||
"txt": [
|
|
||||||
"%comp% / %person%",
|
|
||||||
"%street%, %city%",
|
|
||||||
"Komm-#: %com%",
|
|
||||||
"Servicezeit: %service_time%",
|
|
||||||
"Quittungsgeber: %task_val#1900372105%"
|
|
||||||
],
|
|
||||||
"term": true,
|
|
||||||
"task_arrival": 1900372100,
|
|
||||||
"task_fin_work": 1900372103
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 19003726,
|
|
||||||
"sort": 4,
|
|
||||||
"state": 0,
|
|
||||||
"mode": "del",
|
|
||||||
"comp": "KURS-Institut fuer betriebliche",
|
|
||||||
"person": "",
|
|
||||||
"phone": "05115151650",
|
|
||||||
"street": "Roscherstr. 13a",
|
|
||||||
"city": "30161 Hannover",
|
|
||||||
"com": "",
|
|
||||||
"pos": {
|
|
||||||
"lat": 52.3775,
|
|
||||||
"long": 9.7475
|
|
||||||
},
|
|
||||||
"rem": [
|
|
||||||
"EUR2,50 Parkgebuehren es kann direkt vor der Schranke geparkt werden, Sackkarre erforderlich"
|
|
||||||
],
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"s_id": 1900372600,
|
|
||||||
"type": 3,
|
|
||||||
"topic": "Ankunft bestätigen",
|
|
||||||
"rt": true,
|
|
||||||
"track": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372601,
|
|
||||||
"type": 9,
|
|
||||||
"topic": "Kommissionsnummer",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372602,
|
|
||||||
"type": 5,
|
|
||||||
"topic": "Barcodes scannen",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true,
|
|
||||||
"min": 0,
|
|
||||||
"max": 4,
|
|
||||||
"max_len": 30
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372603,
|
|
||||||
"type": 3,
|
|
||||||
"topic": "Arbeit fertig",
|
|
||||||
"track": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372604,
|
|
||||||
"type": 8,
|
|
||||||
"topic": "Hinweis zur Station",
|
|
||||||
"opt": true,
|
|
||||||
"reenter": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372605,
|
|
||||||
"type": 7,
|
|
||||||
"topic": "Quittungsgeber"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"s_id": 1900372606,
|
|
||||||
"type": 2,
|
|
||||||
"topic": "Unterschrift",
|
|
||||||
"txt": [
|
|
||||||
"%comp% / %person%",
|
|
||||||
"%street%, %city%",
|
|
||||||
"Komm-#: %com%",
|
|
||||||
"Servicezeit: %service_time%",
|
|
||||||
"Quittungsgeber: %task_val#1900372605%"
|
|
||||||
],
|
|
||||||
"term": true,
|
|
||||||
"task_arrival": 1900372600,
|
|
||||||
"task_fin_work": 1900372603
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +1,19 @@
|
|||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:flutter_broadcast_receiver/flutter_broadcast_receiver.dart';
|
import 'package:flutter_broadcast_receiver/flutter_broadcast_receiver.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:stadtbote/content_views/accepted_jobs_page.dart';
|
|
||||||
import 'package:stadtbote/content_views/assigned_jobs_page.dart';
|
import 'package:stadtbote/content_views/assigned_jobs_page.dart';
|
||||||
import 'package:stadtbote/content_views/finished_jobs_page.dart';
|
import 'package:stadtbote/content_views/finished_jobs_page.dart';
|
||||||
import 'package:stadtbote/content_views/messages_page.dart';
|
import 'package:stadtbote/content_views/messages_page.dart';
|
||||||
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
|
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
|
||||||
import 'package:stadtbote/content_views/utils/header_info.dart';
|
import 'package:stadtbote/content_views/utils/header_info.dart';
|
||||||
|
import 'package:stadtbote/model/job.dart';
|
||||||
import 'package:stadtbote/model/status.dart';
|
import 'package:stadtbote/model/status.dart';
|
||||||
import 'package:stadtbote/popups/infos_popup.dart';
|
import 'package:stadtbote/popups/infos_popup.dart';
|
||||||
import 'package:stadtbote/tools/session_info_update.dart';
|
import 'package:stadtbote/tools/session_info_update.dart';
|
||||||
|
import 'package:badges/badges.dart' as badges;
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
import '../model/job.dart';
|
|
||||||
import '../tools/constants.dart';
|
import '../tools/constants.dart';
|
||||||
import '../tools/util.dart';
|
import '../tools/util.dart';
|
||||||
|
|
||||||
@@ -78,10 +76,16 @@ class MainPage extends ContentViewWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _MainPageState extends State<MainPage> {
|
class _MainPageState extends State<MainPage> {
|
||||||
|
final ValueNotifier<int> _assignedJobsValueNotifier = ValueNotifier<int>(0);
|
||||||
|
final ValueNotifier<int> _acceptedJobsValueNotifier = ValueNotifier<int>(0);
|
||||||
|
final ValueNotifier<int> _messagesValueNotifier = ValueNotifier<int>(0);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
|
_initBadges();
|
||||||
|
|
||||||
_initMessages();
|
_initMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,25 +100,94 @@ class _MainPageState extends State<MainPage> {
|
|||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
getDefaultButton(
|
ValueListenableBuilder<int>(
|
||||||
|
valueListenable: _assignedJobsValueNotifier,
|
||||||
|
builder: (context, value, child) {
|
||||||
|
return badges.Badge(
|
||||||
|
showBadge: value > 0,
|
||||||
|
position: badges.BadgePosition.topEnd(top: 0, end: -5),
|
||||||
|
badgeContent: Text(
|
||||||
|
value.toString(),
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 13.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
badgeStyle: badges.BadgeStyle(
|
||||||
|
badgeColor: Colors.red,
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
borderRadius: BorderRadius.circular(4),
|
||||||
|
borderSide: const BorderSide(color: Colors.white, width: 0),
|
||||||
|
elevation: 0,
|
||||||
|
),
|
||||||
|
child: getDefaultButton(
|
||||||
'Zugewiesene Aufträge',
|
'Zugewiesene Aufträge',
|
||||||
image: Image.asset('assets/zugewiesene_auftraege.png', width: 30, height: 30),
|
image: Image.asset('assets/zugewiesene_auftraege.png', width: 30, height: 30),
|
||||||
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const AssignedJobsPage())}),
|
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const AssignedJobsPage())})
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
getDefaultButton(
|
ValueListenableBuilder<int>(
|
||||||
|
valueListenable: _acceptedJobsValueNotifier,
|
||||||
|
builder: (context, value, child) {
|
||||||
|
return badges.Badge(
|
||||||
|
showBadge: value > 0,
|
||||||
|
position: badges.BadgePosition.topEnd(top: 0, end: -5),
|
||||||
|
badgeContent: Text(
|
||||||
|
value.toString(),
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 13.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
badgeStyle: badges.BadgeStyle(
|
||||||
|
badgeColor: Colors.red,
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
borderRadius: BorderRadius.circular(4),
|
||||||
|
borderSide: const BorderSide(color: Colors.white, width: 0),
|
||||||
|
elevation: 0,
|
||||||
|
),
|
||||||
|
child: getDefaultButton(
|
||||||
'Angenommene Aufträge',
|
'Angenommene Aufträge',
|
||||||
image: Image.asset('assets/angenommene_auftraege.png', width: 30, height: 30),
|
image: Image.asset('assets/angenommene_auftraege.png', width: 30, height: 30),
|
||||||
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const AcceptedJobsPage())}),
|
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const AssignedJobsPage())})
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
getDefaultButton(
|
getDefaultButton(
|
||||||
'Erledigte Aufträge',
|
'Erledigte Aufträge',
|
||||||
image: Image.asset('assets/erledigte_auftraege.png', width: 30, height: 30),
|
image: Image.asset('assets/erledigte_auftraege.png', width: 30, height: 30),
|
||||||
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const FinishedJobsPage())}),
|
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const FinishedJobsPage())}),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
getDefaultButton(
|
ValueListenableBuilder<int>(
|
||||||
|
valueListenable: _messagesValueNotifier,
|
||||||
|
builder: (context, value, child) {
|
||||||
|
return badges.Badge(
|
||||||
|
showBadge: value > 0,
|
||||||
|
position: badges.BadgePosition.topEnd(top: 0, end: -5),
|
||||||
|
badgeContent: Text(
|
||||||
|
value.toString(),
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 13.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
badgeStyle: badges.BadgeStyle(
|
||||||
|
badgeColor: Colors.red,
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
borderRadius: BorderRadius.circular(4),
|
||||||
|
borderSide: const BorderSide(color: Colors.white, width: 0),
|
||||||
|
elevation: 0,
|
||||||
|
),
|
||||||
|
child: getDefaultButton(
|
||||||
'Nachrichten',
|
'Nachrichten',
|
||||||
image: Image.asset('assets/nachrichten.png', width: 30, height: 30),
|
image: Image.asset('assets/nachrichten.png', width: 30, height: 30),
|
||||||
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const MessagesPage())}),
|
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const MessagesPage())})
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
getDefaultButton(
|
getDefaultButton(
|
||||||
'Anfahrtsbereich',
|
'Anfahrtsbereich',
|
||||||
@@ -126,10 +199,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),
|
||||||
() => {
|
() => {BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const FinishedJobsPage())}),
|
||||||
_test()
|
|
||||||
//BroadcastReceiver().publish<ContentViewWidget>(Constants.messageTopicPushContentView, arguments: const FinishedJobsPage())
|
|
||||||
}),
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@@ -153,7 +223,7 @@ class _MainPageState extends State<MainPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_test() async {
|
/*_test() async {
|
||||||
var json = await rootBundle.loadString('assets/job.json');
|
var json = await rootBundle.loadString('assets/job.json');
|
||||||
var jsonMap = jsonDecode(json);
|
var jsonMap = jsonDecode(json);
|
||||||
var payload = jsonMap["payload"];
|
var payload = jsonMap["payload"];
|
||||||
@@ -167,11 +237,16 @@ class _MainPageState extends State<MainPage> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
_initMessages() {
|
_initMessages() {
|
||||||
BroadcastReceiver().subscribe<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate, (statusInfoUpdate) {
|
BroadcastReceiver().subscribe<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate, (statusInfoUpdate) {
|
||||||
widget._sidValueNotifier.value = statusInfoUpdate.status.sid;
|
widget._sidValueNotifier.value = statusInfoUpdate.status.sid;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _initBadges() async {
|
||||||
|
_assignedJobsValueNotifier.value = await MyApp.isarInstance.jobs.filter().stateEqualTo(0).count();
|
||||||
|
_acceptedJobsValueNotifier.value = await MyApp.isarInstance.jobs.filter().stateEqualTo(1).count();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,7 @@ import 'package:stadtbote/content_views/utils/header_info.dart';
|
|||||||
import 'package:stadtbote/model/job_tour.dart';
|
import 'package:stadtbote/model/job_tour.dart';
|
||||||
import 'package:stadtbote/popups/tasks_popups/arrived_popup.dart';
|
import 'package:stadtbote/popups/tasks_popups/arrived_popup.dart';
|
||||||
import 'package:stadtbote/popups/tasks_popups/commision_number_popup.dart';
|
import 'package:stadtbote/popups/tasks_popups/commision_number_popup.dart';
|
||||||
|
import 'package:stadtbote/popups/tasks_popups/pickup_delivery_status_popup.dart';
|
||||||
import 'package:stadtbote/popups/tasks_popups/receipt_giver_popup.dart';
|
import 'package:stadtbote/popups/tasks_popups/receipt_giver_popup.dart';
|
||||||
import 'package:stadtbote/popups/tasks_popups/scan_barcodes_popup.dart';
|
import 'package:stadtbote/popups/tasks_popups/scan_barcodes_popup.dart';
|
||||||
import 'package:stadtbote/popups/tasks_popups/signature_popup.dart';
|
import 'package:stadtbote/popups/tasks_popups/signature_popup.dart';
|
||||||
@@ -217,6 +218,10 @@ class _TaskListPageState extends State<TaskListPage> {
|
|||||||
case 9:
|
case 9:
|
||||||
_processCommissionNumber(taskInfo);
|
_processCommissionNumber(taskInfo);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 11:
|
||||||
|
_processPickupDeliveryStatusTask(taskInfo);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,6 +317,16 @@ class _TaskListPageState extends State<TaskListPage> {
|
|||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _processPickupDeliveryStatusTask(TaskInfo taskInfo) {
|
||||||
|
Future.delayed(const Duration(seconds: 1), () async {
|
||||||
|
_popup = showPickupDeliveryStatusPopup(context, taskInfo, () => {
|
||||||
|
_popup.dismiss(context),
|
||||||
|
|
||||||
|
taskInfo.completed = true,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void _processSignature(TaskInfo taskInfo) {
|
void _processSignature(TaskInfo taskInfo) {
|
||||||
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft]);
|
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft]);
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class _TourListPageState extends State<TourListPage> {
|
|||||||
late List<Widget> jobWidgets = _createjobWidgets();
|
late List<Widget> jobWidgets = _createjobWidgets();
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(18.0),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class TourTask {
|
|||||||
late int? taskArrival;
|
late int? taskArrival;
|
||||||
@JsonKey(name: 'task_fin_work')
|
@JsonKey(name: 'task_fin_work')
|
||||||
late int? taskFinWork;
|
late int? taskFinWork;
|
||||||
|
late List<String>? entries;
|
||||||
|
|
||||||
TourTask();
|
TourTask();
|
||||||
|
|
||||||
|
|||||||
+307
-47
@@ -13,68 +13,73 @@ const TourTaskSchema = Schema(
|
|||||||
name: r'TourTask',
|
name: r'TourTask',
|
||||||
id: -3019997418839113825,
|
id: -3019997418839113825,
|
||||||
properties: {
|
properties: {
|
||||||
r'max': PropertySchema(
|
r'entries': PropertySchema(
|
||||||
id: 0,
|
id: 0,
|
||||||
|
name: r'entries',
|
||||||
|
type: IsarType.stringList,
|
||||||
|
),
|
||||||
|
r'max': PropertySchema(
|
||||||
|
id: 1,
|
||||||
name: r'max',
|
name: r'max',
|
||||||
type: IsarType.long,
|
type: IsarType.long,
|
||||||
),
|
),
|
||||||
r'maxLen': PropertySchema(
|
r'maxLen': PropertySchema(
|
||||||
id: 1,
|
id: 2,
|
||||||
name: r'maxLen',
|
name: r'maxLen',
|
||||||
type: IsarType.long,
|
type: IsarType.long,
|
||||||
),
|
),
|
||||||
r'min': PropertySchema(
|
r'min': PropertySchema(
|
||||||
id: 2,
|
id: 3,
|
||||||
name: r'min',
|
name: r'min',
|
||||||
type: IsarType.long,
|
type: IsarType.long,
|
||||||
),
|
),
|
||||||
r'opt': PropertySchema(
|
r'opt': PropertySchema(
|
||||||
id: 3,
|
id: 4,
|
||||||
name: r'opt',
|
name: r'opt',
|
||||||
type: IsarType.bool,
|
type: IsarType.bool,
|
||||||
),
|
),
|
||||||
r'reenter': PropertySchema(
|
r'reenter': PropertySchema(
|
||||||
id: 4,
|
id: 5,
|
||||||
name: r'reenter',
|
name: r'reenter',
|
||||||
type: IsarType.bool,
|
type: IsarType.bool,
|
||||||
),
|
),
|
||||||
r'rt': PropertySchema(
|
r'rt': PropertySchema(
|
||||||
id: 5,
|
id: 6,
|
||||||
name: r'rt',
|
name: r'rt',
|
||||||
type: IsarType.bool,
|
type: IsarType.bool,
|
||||||
),
|
),
|
||||||
r'sId': PropertySchema(
|
r'sId': PropertySchema(
|
||||||
id: 6,
|
id: 7,
|
||||||
name: r'sId',
|
name: r'sId',
|
||||||
type: IsarType.long,
|
type: IsarType.long,
|
||||||
),
|
),
|
||||||
r'taskArrival': PropertySchema(
|
r'taskArrival': PropertySchema(
|
||||||
id: 7,
|
id: 8,
|
||||||
name: r'taskArrival',
|
name: r'taskArrival',
|
||||||
type: IsarType.long,
|
type: IsarType.long,
|
||||||
),
|
),
|
||||||
r'taskFinWork': PropertySchema(
|
r'taskFinWork': PropertySchema(
|
||||||
id: 8,
|
id: 9,
|
||||||
name: r'taskFinWork',
|
name: r'taskFinWork',
|
||||||
type: IsarType.long,
|
type: IsarType.long,
|
||||||
),
|
),
|
||||||
r'topic': PropertySchema(
|
r'topic': PropertySchema(
|
||||||
id: 9,
|
id: 10,
|
||||||
name: r'topic',
|
name: r'topic',
|
||||||
type: IsarType.string,
|
type: IsarType.string,
|
||||||
),
|
),
|
||||||
r'track': PropertySchema(
|
r'track': PropertySchema(
|
||||||
id: 10,
|
id: 11,
|
||||||
name: r'track',
|
name: r'track',
|
||||||
type: IsarType.bool,
|
type: IsarType.bool,
|
||||||
),
|
),
|
||||||
r'txt': PropertySchema(
|
r'txt': PropertySchema(
|
||||||
id: 11,
|
id: 12,
|
||||||
name: r'txt',
|
name: r'txt',
|
||||||
type: IsarType.stringList,
|
type: IsarType.stringList,
|
||||||
),
|
),
|
||||||
r'type': PropertySchema(
|
r'type': PropertySchema(
|
||||||
id: 12,
|
id: 13,
|
||||||
name: r'type',
|
name: r'type',
|
||||||
type: IsarType.long,
|
type: IsarType.long,
|
||||||
)
|
)
|
||||||
@@ -91,6 +96,18 @@ int _tourTaskEstimateSize(
|
|||||||
Map<Type, List<int>> allOffsets,
|
Map<Type, List<int>> allOffsets,
|
||||||
) {
|
) {
|
||||||
var bytesCount = offsets.last;
|
var bytesCount = offsets.last;
|
||||||
|
{
|
||||||
|
final list = object.entries;
|
||||||
|
if (list != null) {
|
||||||
|
bytesCount += 3 + list.length * 3;
|
||||||
|
{
|
||||||
|
for (var i = 0; i < list.length; i++) {
|
||||||
|
final value = list[i];
|
||||||
|
bytesCount += value.length * 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
bytesCount += 3 + object.topic.length * 3;
|
bytesCount += 3 + object.topic.length * 3;
|
||||||
{
|
{
|
||||||
final list = object.txt;
|
final list = object.txt;
|
||||||
@@ -113,19 +130,20 @@ void _tourTaskSerialize(
|
|||||||
List<int> offsets,
|
List<int> offsets,
|
||||||
Map<Type, List<int>> allOffsets,
|
Map<Type, List<int>> allOffsets,
|
||||||
) {
|
) {
|
||||||
writer.writeLong(offsets[0], object.max);
|
writer.writeStringList(offsets[0], object.entries);
|
||||||
writer.writeLong(offsets[1], object.maxLen);
|
writer.writeLong(offsets[1], object.max);
|
||||||
writer.writeLong(offsets[2], object.min);
|
writer.writeLong(offsets[2], object.maxLen);
|
||||||
writer.writeBool(offsets[3], object.opt);
|
writer.writeLong(offsets[3], object.min);
|
||||||
writer.writeBool(offsets[4], object.reenter);
|
writer.writeBool(offsets[4], object.opt);
|
||||||
writer.writeBool(offsets[5], object.rt);
|
writer.writeBool(offsets[5], object.reenter);
|
||||||
writer.writeLong(offsets[6], object.sId);
|
writer.writeBool(offsets[6], object.rt);
|
||||||
writer.writeLong(offsets[7], object.taskArrival);
|
writer.writeLong(offsets[7], object.sId);
|
||||||
writer.writeLong(offsets[8], object.taskFinWork);
|
writer.writeLong(offsets[8], object.taskArrival);
|
||||||
writer.writeString(offsets[9], object.topic);
|
writer.writeLong(offsets[9], object.taskFinWork);
|
||||||
writer.writeBool(offsets[10], object.track);
|
writer.writeString(offsets[10], object.topic);
|
||||||
writer.writeStringList(offsets[11], object.txt);
|
writer.writeBool(offsets[11], object.track);
|
||||||
writer.writeLong(offsets[12], object.type);
|
writer.writeStringList(offsets[12], object.txt);
|
||||||
|
writer.writeLong(offsets[13], object.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
TourTask _tourTaskDeserialize(
|
TourTask _tourTaskDeserialize(
|
||||||
@@ -135,19 +153,20 @@ TourTask _tourTaskDeserialize(
|
|||||||
Map<Type, List<int>> allOffsets,
|
Map<Type, List<int>> allOffsets,
|
||||||
) {
|
) {
|
||||||
final object = TourTask();
|
final object = TourTask();
|
||||||
object.max = reader.readLongOrNull(offsets[0]);
|
object.entries = reader.readStringList(offsets[0]);
|
||||||
object.maxLen = reader.readLongOrNull(offsets[1]);
|
object.max = reader.readLongOrNull(offsets[1]);
|
||||||
object.min = reader.readLongOrNull(offsets[2]);
|
object.maxLen = reader.readLongOrNull(offsets[2]);
|
||||||
object.opt = reader.readBoolOrNull(offsets[3]);
|
object.min = reader.readLongOrNull(offsets[3]);
|
||||||
object.reenter = reader.readBoolOrNull(offsets[4]);
|
object.opt = reader.readBoolOrNull(offsets[4]);
|
||||||
object.rt = reader.readBoolOrNull(offsets[5]);
|
object.reenter = reader.readBoolOrNull(offsets[5]);
|
||||||
object.sId = reader.readLong(offsets[6]);
|
object.rt = reader.readBoolOrNull(offsets[6]);
|
||||||
object.taskArrival = reader.readLongOrNull(offsets[7]);
|
object.sId = reader.readLong(offsets[7]);
|
||||||
object.taskFinWork = reader.readLongOrNull(offsets[8]);
|
object.taskArrival = reader.readLongOrNull(offsets[8]);
|
||||||
object.topic = reader.readString(offsets[9]);
|
object.taskFinWork = reader.readLongOrNull(offsets[9]);
|
||||||
object.track = reader.readBoolOrNull(offsets[10]);
|
object.topic = reader.readString(offsets[10]);
|
||||||
object.txt = reader.readStringList(offsets[11]);
|
object.track = reader.readBoolOrNull(offsets[11]);
|
||||||
object.type = reader.readLong(offsets[12]);
|
object.txt = reader.readStringList(offsets[12]);
|
||||||
|
object.type = reader.readLong(offsets[13]);
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,30 +178,32 @@ P _tourTaskDeserializeProp<P>(
|
|||||||
) {
|
) {
|
||||||
switch (propertyId) {
|
switch (propertyId) {
|
||||||
case 0:
|
case 0:
|
||||||
return (reader.readLongOrNull(offset)) as P;
|
return (reader.readStringList(offset)) as P;
|
||||||
case 1:
|
case 1:
|
||||||
return (reader.readLongOrNull(offset)) as P;
|
return (reader.readLongOrNull(offset)) as P;
|
||||||
case 2:
|
case 2:
|
||||||
return (reader.readLongOrNull(offset)) as P;
|
return (reader.readLongOrNull(offset)) as P;
|
||||||
case 3:
|
case 3:
|
||||||
return (reader.readBoolOrNull(offset)) as P;
|
return (reader.readLongOrNull(offset)) as P;
|
||||||
case 4:
|
case 4:
|
||||||
return (reader.readBoolOrNull(offset)) as P;
|
return (reader.readBoolOrNull(offset)) as P;
|
||||||
case 5:
|
case 5:
|
||||||
return (reader.readBoolOrNull(offset)) as P;
|
return (reader.readBoolOrNull(offset)) as P;
|
||||||
case 6:
|
case 6:
|
||||||
return (reader.readLong(offset)) as P;
|
return (reader.readBoolOrNull(offset)) as P;
|
||||||
case 7:
|
case 7:
|
||||||
return (reader.readLongOrNull(offset)) as P;
|
return (reader.readLong(offset)) as P;
|
||||||
case 8:
|
case 8:
|
||||||
return (reader.readLongOrNull(offset)) as P;
|
return (reader.readLongOrNull(offset)) as P;
|
||||||
case 9:
|
case 9:
|
||||||
return (reader.readString(offset)) as P;
|
return (reader.readLongOrNull(offset)) as P;
|
||||||
case 10:
|
case 10:
|
||||||
return (reader.readBoolOrNull(offset)) as P;
|
return (reader.readString(offset)) as P;
|
||||||
case 11:
|
case 11:
|
||||||
return (reader.readStringList(offset)) as P;
|
return (reader.readBoolOrNull(offset)) as P;
|
||||||
case 12:
|
case 12:
|
||||||
|
return (reader.readStringList(offset)) as P;
|
||||||
|
case 13:
|
||||||
return (reader.readLong(offset)) as P;
|
return (reader.readLong(offset)) as P;
|
||||||
default:
|
default:
|
||||||
throw IsarError('Unknown property with id $propertyId');
|
throw IsarError('Unknown property with id $propertyId');
|
||||||
@@ -191,6 +212,242 @@ P _tourTaskDeserializeProp<P>(
|
|||||||
|
|
||||||
extension TourTaskQueryFilter
|
extension TourTaskQueryFilter
|
||||||
on QueryBuilder<TourTask, TourTask, QFilterCondition> {
|
on QueryBuilder<TourTask, TourTask, QFilterCondition> {
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesIsNull() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(const FilterCondition.isNull(
|
||||||
|
property: r'entries',
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesIsNotNull() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||||
|
property: r'entries',
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesElementEqualTo(
|
||||||
|
String value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.equalTo(
|
||||||
|
property: r'entries',
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition>
|
||||||
|
entriesElementGreaterThan(
|
||||||
|
String value, {
|
||||||
|
bool include = false,
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||||
|
include: include,
|
||||||
|
property: r'entries',
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition>
|
||||||
|
entriesElementLessThan(
|
||||||
|
String value, {
|
||||||
|
bool include = false,
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.lessThan(
|
||||||
|
include: include,
|
||||||
|
property: r'entries',
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesElementBetween(
|
||||||
|
String lower,
|
||||||
|
String upper, {
|
||||||
|
bool includeLower = true,
|
||||||
|
bool includeUpper = true,
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.between(
|
||||||
|
property: r'entries',
|
||||||
|
lower: lower,
|
||||||
|
includeLower: includeLower,
|
||||||
|
upper: upper,
|
||||||
|
includeUpper: includeUpper,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition>
|
||||||
|
entriesElementStartsWith(
|
||||||
|
String value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.startsWith(
|
||||||
|
property: r'entries',
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition>
|
||||||
|
entriesElementEndsWith(
|
||||||
|
String value, {
|
||||||
|
bool caseSensitive = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.endsWith(
|
||||||
|
property: r'entries',
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition>
|
||||||
|
entriesElementContains(String value, {bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.contains(
|
||||||
|
property: r'entries',
|
||||||
|
value: value,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesElementMatches(
|
||||||
|
String pattern,
|
||||||
|
{bool caseSensitive = true}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.matches(
|
||||||
|
property: r'entries',
|
||||||
|
wildcard: pattern,
|
||||||
|
caseSensitive: caseSensitive,
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition>
|
||||||
|
entriesElementIsEmpty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.equalTo(
|
||||||
|
property: r'entries',
|
||||||
|
value: '',
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition>
|
||||||
|
entriesElementIsNotEmpty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||||
|
property: r'entries',
|
||||||
|
value: '',
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesLengthEqualTo(
|
||||||
|
int length) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.listLength(
|
||||||
|
r'entries',
|
||||||
|
length,
|
||||||
|
true,
|
||||||
|
length,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesIsEmpty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.listLength(
|
||||||
|
r'entries',
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesIsNotEmpty() {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.listLength(
|
||||||
|
r'entries',
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
999999,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesLengthLessThan(
|
||||||
|
int length, {
|
||||||
|
bool include = false,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.listLength(
|
||||||
|
r'entries',
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
length,
|
||||||
|
include,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition>
|
||||||
|
entriesLengthGreaterThan(
|
||||||
|
int length, {
|
||||||
|
bool include = false,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.listLength(
|
||||||
|
r'entries',
|
||||||
|
length,
|
||||||
|
include,
|
||||||
|
999999,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> entriesLengthBetween(
|
||||||
|
int lower,
|
||||||
|
int upper, {
|
||||||
|
bool includeLower = true,
|
||||||
|
bool includeUpper = true,
|
||||||
|
}) {
|
||||||
|
return QueryBuilder.apply(this, (query) {
|
||||||
|
return query.listLength(
|
||||||
|
r'entries',
|
||||||
|
lower,
|
||||||
|
includeLower,
|
||||||
|
upper,
|
||||||
|
includeUpper,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> maxIsNull() {
|
QueryBuilder<TourTask, TourTask, QAfterFilterCondition> maxIsNull() {
|
||||||
return QueryBuilder.apply(this, (query) {
|
return QueryBuilder.apply(this, (query) {
|
||||||
return query.addFilterCondition(const FilterCondition.isNull(
|
return query.addFilterCondition(const FilterCondition.isNull(
|
||||||
@@ -1132,7 +1389,9 @@ TourTask _$TourTaskFromJson(Map<String, dynamic> json) => TourTask()
|
|||||||
..track = json['track'] as bool?
|
..track = json['track'] as bool?
|
||||||
..txt = (json['txt'] as List<dynamic>?)?.map((e) => e as String).toList()
|
..txt = (json['txt'] as List<dynamic>?)?.map((e) => e as String).toList()
|
||||||
..taskArrival = json['task_arrival'] as int?
|
..taskArrival = json['task_arrival'] as int?
|
||||||
..taskFinWork = json['task_fin_work'] as int?;
|
..taskFinWork = json['task_fin_work'] as int?
|
||||||
|
..entries =
|
||||||
|
(json['entries'] as List<dynamic>?)?.map((e) => e as String).toList();
|
||||||
|
|
||||||
Map<String, dynamic> _$TourTaskToJson(TourTask instance) => <String, dynamic>{
|
Map<String, dynamic> _$TourTaskToJson(TourTask instance) => <String, dynamic>{
|
||||||
's_id': instance.sId,
|
's_id': instance.sId,
|
||||||
@@ -1148,4 +1407,5 @@ Map<String, dynamic> _$TourTaskToJson(TourTask instance) => <String, dynamic>{
|
|||||||
'txt': instance.txt,
|
'txt': instance.txt,
|
||||||
'task_arrival': instance.taskArrival,
|
'task_arrival': instance.taskArrival,
|
||||||
'task_fin_work': instance.taskFinWork,
|
'task_fin_work': instance.taskFinWork,
|
||||||
|
'entries': instance.entries,
|
||||||
};
|
};
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:kumi_popup_window/kumi_popup_window.dart';
|
||||||
|
import 'package:stadtbote/model/task_info.dart';
|
||||||
|
import 'package:stadtbote/tools/util.dart';
|
||||||
|
|
||||||
|
KumiPopupWindow showPickupDeliveryStatusPopup(BuildContext context, TaskInfo taskInfo, Function() onFinished) {
|
||||||
|
return 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: false,
|
||||||
|
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) {
|
||||||
|
return SizedBox(
|
||||||
|
key: GlobalKey(),
|
||||||
|
height: MediaQuery.of(context).size.height * 0.2,
|
||||||
|
width: MediaQuery.of(context).size.width * 0.8,
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
color: Colors.white,
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.grey,
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Text(taskInfo.task.topic),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
/*DropdownMenu<String>(
|
||||||
|
onSelected: (String? value) {
|
||||||
|
},
|
||||||
|
/*dropdownMenuEntries: list.map<DropdownMenuEntry<String>>((String value) {
|
||||||
|
return DropdownMenuEntry<String>(value: value, label: value);
|
||||||
|
}).toList(),*/
|
||||||
|
),*/
|
||||||
|
getDefaultButton('Übernehmen', buttonHeight: 50, () => {
|
||||||
|
onFinished()
|
||||||
|
})
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
*/
|
||||||
@@ -46,6 +46,9 @@ class MqttCore {
|
|||||||
String clientId = await Util.getAppUuid();
|
String clientId = await Util.getAppUuid();
|
||||||
Util.logInfo("client id: $clientId");
|
Util.logInfo("client id: $clientId");
|
||||||
|
|
||||||
|
Util.logInfo("broker uri: $_brokerUri");
|
||||||
|
Util.logInfo("broker port: $_brokerPort");
|
||||||
|
|
||||||
_mqttClient = MqttServerClient.withPort(_brokerUri, clientId, _brokerPort);
|
_mqttClient = MqttServerClient.withPort(_brokerUri, clientId, _brokerPort);
|
||||||
_mqttClient.logging(on: false);
|
_mqttClient.logging(on: false);
|
||||||
_mqttClient.keepAlivePeriod = 20;
|
_mqttClient.keepAlivePeriod = 20;
|
||||||
@@ -55,8 +58,8 @@ class MqttCore {
|
|||||||
_mqttClient.connectionMessage = MqttConnectMessage()
|
_mqttClient.connectionMessage = MqttConnectMessage()
|
||||||
.withClientIdentifier('clientId')
|
.withClientIdentifier('clientId')
|
||||||
.withWillQos(MqttQos.atMostOnce)
|
.withWillQos(MqttQos.atMostOnce)
|
||||||
.withWillTopic('willTopic')
|
//.withWillTopic('willTopic')
|
||||||
.withWillMessage('willMessage')
|
//.withWillMessage('willMessage')
|
||||||
.authenticateAs("app", "apppwd");
|
.authenticateAs("app", "apppwd");
|
||||||
|
|
||||||
await _mqttClient.connect();
|
await _mqttClient.connect();
|
||||||
|
|||||||
@@ -57,6 +57,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.11.0"
|
version: "2.11.0"
|
||||||
|
badges:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: badges
|
||||||
|
sha256: a7b6bbd60dce418df0db3058b53f9d083c22cdb5132a052145dc267494df0b84
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.2"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ dependencies:
|
|||||||
json_serializable: ^6.6.2
|
json_serializable: ^6.6.2
|
||||||
json_annotation: ^4.8.1
|
json_annotation: ^4.8.1
|
||||||
shared_preferences: ^2.1.1
|
shared_preferences: ^2.1.1
|
||||||
|
badges: ^3.1.1
|
||||||
flutter_broadcast_receiver: ^1.0.0+2
|
flutter_broadcast_receiver: ^1.0.0+2
|
||||||
intl: ^0.18.0
|
intl: ^0.18.0
|
||||||
another_stepper: ^1.2.2
|
another_stepper: ^1.2.2
|
||||||
|
|||||||
Reference in new issue
Block a user