From 31fe4c5a06bf6df8dca3bb9a643a43201b2c813f Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Mon, 12 Feb 2024 17:03:03 +0100 Subject: [PATCH] Erweiterungen --- lib/content_views/task_list_page.dart | 90 +- lib/model/task_info.dart | 1 + lib/popups/infos_popup.dart | 97 +- lib/popups/map_popup.dart | 355 +++---- lib/popups/tasks_popups/arrived_popup.dart | 104 +- .../tasks_popups/commision_number_popup.dart | 107 +- .../pickup_delivery_status_popup.dart | 4 +- .../tasks_popups/receipt_giver_popup.dart | 107 +- .../tasks_popups/scan_barcodes_popup.dart | 172 ++- lib/popups/tasks_popups/signature_popup.dart | 8 +- .../tasks_popups/station_notice_popup.dart | 114 +- .../tasks_popups/take_photos_popup.dart | 2 +- lib/protocoll_messages/fin_task_message.dart | 2 + .../fin_task_message.g.dart | 267 +++++ lib/protocoll_messages/fin_tour_message.dart | 10 + .../fin_tour_message.g.dart | 979 +++++++++++++++++- lib/tools/mqtt_core.dart | 25 +- lib/tools/util.dart | 5 +- pubspec.lock | 8 - pubspec.yaml | 1 - 20 files changed, 1804 insertions(+), 654 deletions(-) diff --git a/lib/content_views/task_list_page.dart b/lib/content_views/task_list_page.dart index ca80b77..167d0e0 100644 --- a/lib/content_views/task_list_page.dart +++ b/lib/content_views/task_list_page.dart @@ -1,9 +1,10 @@ +import 'dart:convert'; + +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:intl/intl.dart'; import 'package:isar/isar.dart'; -import 'package:kumi_popup_window/kumi_popup_window.dart'; -import 'package:stadtbote/content_views/tour_list_page.dart'; import 'package:stadtbote/content_views/utils/content_view_widget.dart'; import 'package:stadtbote/content_views/utils/header_info.dart'; import 'package:stadtbote/messages/PopContentViewMessage.dart'; @@ -64,8 +65,6 @@ class _TaskListPageState extends State { late List _taskList; - late KumiPopupWindow _popup; - @override void initState() { Future.delayed(const Duration(seconds: 0), () async { @@ -244,9 +243,12 @@ class _TaskListPageState extends State { } _processTaskArrivedOrFinished(TaskInfo taskInfo) { - _popup = showTaskArrivedPopup(context, taskInfo, () { + showTaskArrivedPopup(context, taskInfo, () { DateFormat dateFormat = DateFormat("dd.MM.yyyy HH:mm"); + var answer = _createAnswerHeader(taskInfo); + + taskInfo.answer = jsonEncode(answer.toJson()); taskInfo.additionalText = dateFormat.format(DateTime.now()); taskInfo.completed = true; @@ -255,34 +257,38 @@ class _TaskListPageState extends State { setState(() {}); _finishTaskProcessing(taskInfo); - - _popup.dismiss(context); }); } _processCommissionNumber(TaskInfo taskInfo) { - _popup = showComissionNumberPopup(context, taskInfo, (comissionNumber) { + showComissionNumberPopup(context, taskInfo, (comissionNumber) { + var answer = _createAnswerHeader(taskInfo); + answer.val = comissionNumber; + + taskInfo.answer = jsonEncode(answer.toJson()); taskInfo.additionalText = comissionNumber; taskInfo.completed = true; setState(() {}); _finishTaskProcessing(taskInfo); - - _popup.dismiss(context); }); } _processScanBarcodes(TaskInfo taskInfo) { - _popup = showScanBarcodesPopup(context, taskInfo, (List barcodes) { + showScanBarcodesPopup(context, taskInfo, (List barcodes) { + var answer = _createAnswerHeader(taskInfo); + answer.codes = []; + for(var barcode in barcodes) { + answer.codes!.add(barcode); + } + taskInfo.additionalText = "Barcodes gescannt"; taskInfo.completed = true; setState(() {}); _finishTaskProcessing(taskInfo); - - _popup.dismiss(context); }); } @@ -298,10 +304,11 @@ class _TaskListPageState extends State { } void _processStationNotice(TaskInfo taskInfo) { - _popup = showStationNoticePopup(context, taskInfo, (notice) { - _popup.dismiss(context); + showStationNoticePopup(context, taskInfo, (notice) { + var answer = _createAnswerHeader(taskInfo); + answer.val = notice; - taskInfo.additionalText = notice; + taskInfo.answer = jsonEncode(answer.toJson()); taskInfo.completed = true; _finishTaskProcessing(taskInfo); @@ -311,22 +318,28 @@ class _TaskListPageState extends State { } void _processReceiptGiver(TaskInfo taskInfo) { - _popup = showReceiptGiverPopup(context, taskInfo, (receiptGiver) { + showReceiptGiverPopup(context, taskInfo, (receiptGiver) { + var answer = _createAnswerHeader(taskInfo); + answer.val = receiptGiver; + + taskInfo.answer = jsonEncode(answer.toJson()); taskInfo.additionalText = receiptGiver; taskInfo.completed = true; setState(() {}); _finishTaskProcessing(taskInfo); - - _popup.dismiss(context); }); } void _processPickupDeliveryStatusTask(TaskInfo taskInfo) { Future.delayed(const Duration(seconds: 1), () async { showPickupDeliveryStatusPopup(context, taskInfo, (tourEntry) { - taskInfo.additionalText = tourEntry!.text; + var answer = _createAnswerHeader(taskInfo); + answer.code = tourEntry!.code; + + taskInfo.answer = jsonEncode(answer.toJson()); + taskInfo.additionalText = tourEntry.text; taskInfo.completed = true; _finishTaskProcessing(taskInfo); @@ -341,6 +354,10 @@ class _TaskListPageState extends State { Future.delayed(const Duration(seconds: 1), () async { showSignaturePopup(context, taskInfo, () { + var answer = _createAnswerHeader(taskInfo); + answer.sign = 'A110'; + + taskInfo.answer = jsonEncode(answer.toJson()); taskInfo.completed = true; SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); @@ -395,6 +412,22 @@ class _TaskListPageState extends State { MqttCore.instance.publishPayloadMessage("job", finTaskMessage.toJson()); } + FinTourTask _createAnswerHeader(TaskInfo taskInfo) { + var position = MyApp.currentPosition; + + var finTourTask = FinTourTask(); + finTourTask.sId = taskInfo.task.sId; + finTourTask.time = DateTime.now().toIso8601String(); + finTourTask.pos = FinTaskPos(); + if (position != null) { + finTourTask.pos.lat = position.latitude; + finTourTask.pos.long = position.longitude; + finTourTask.pos.acc = position.accuracy.toInt(); + } + + return finTourTask; + } + _sendFinTourMessage() async { var finTourMessage = FinTourMessage(); finTourMessage.finTour = FinTour(); @@ -412,20 +445,17 @@ class _TaskListPageState extends State { finTourMessage.finTour.tasks = []; for(var taskInfo in _taskList) { - var finTourTask = FinTourTask(); - finTourTask.sId = taskInfo.task.sId; - finTourTask.time = DateTime.now().toIso8601String(); - finTourTask.pos = FinTaskPos(); - finTourTask.pos.lat = 0; - finTourTask.pos.long = 0; + if (taskInfo.answer != null) { + var finTourTask = FinTourTask.fromJson(jsonDecode(taskInfo.answer!)); - finTourMessage.finTour.tasks.add(finTourTask); + finTourMessage.finTour.tasks.add(finTourTask); + } } - MqttCore.instance.publishPayloadMessage("job", finTourMessage.toJson()); + MqttCore.instance.publishPayloadMessage("fin_tour", finTourMessage.toJson()); - widget.tour.state = 9; - await MyApp.isarInstance.writeTxn(() async { + widget.tour.state = Constants.stateFinishedNotConfirmed; + await MyApp.isarInstance.writeTxn(() async { await MyApp.isarInstance.jobs.put(widget.job); }); } diff --git a/lib/model/task_info.dart b/lib/model/task_info.dart index c4f9bce..033baec 100644 --- a/lib/model/task_info.dart +++ b/lib/model/task_info.dart @@ -1,5 +1,6 @@ import 'package:isar/isar.dart'; import 'package:stadtbote/model/tour_task.dart'; +import 'package:stadtbote/protocoll_messages/fin_tour_message.dart'; import '../tools/util.dart'; diff --git a/lib/popups/infos_popup.dart b/lib/popups/infos_popup.dart index f2ccd9b..1d9c6f8 100644 --- a/lib/popups/infos_popup.dart +++ b/lib/popups/infos_popup.dart @@ -1,11 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:stadtbote/main.dart'; import 'package:stadtbote/model/session_status.dart'; import 'package:stadtbote/tools/mqtt_core.dart'; import 'package:stadtbote/tools/util.dart'; -void showInfosPopup(BuildContext context, SessionStatus? status) { +void showInfosPopup(BuildContext context, SessionStatus? status) async { var text = "Versionsnummer: a203\n"; text += "Verbindungsstatus: ${MqttCore.instance.connectionState == ConnectionStateEnum.connected ? "Verbunden" : "NICHT verbunden"}\n"; text += "GPS-Status: ${MyApp.currentPosition != null ? MyApp.currentPosition!.timestamp.toString() : "Unbekannt"}\n"; @@ -22,59 +21,41 @@ void showInfosPopup(BuildContext context, SessionStatus? status) { text += "Keine Informationen gefunden"; } - 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) { - return SizedBox( - key: GlobalKey(), - height: 350, - width: MediaQuery.of(context).size.width * 0.8, - child: Container( - height: 100, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white, - border: Border.all( - color: Colors.grey, - width: 1, - ), - ), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Column( - children: [ - Expanded(child: Text(text, textAlign: TextAlign.left)), - getDefaultButton( - 'OK', - () => {Navigator.pop(context)}, - ), - ], - ), - ), - ) - ); - }, - ); -} \ No newline at end of file + 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) { + return SizedBox( + key: GlobalKey(), + height: 350, + width: MediaQuery.of(context).size.width * 0.8, + child: Container( + height: 100, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 1, + ), + ), + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + children: [ + Expanded(child: Text(text, textAlign: TextAlign.left)), + getDefaultButton( + 'OK', + () => {Navigator.pop(context)}, + ), + ], + ), + ), + )); + })); + }); +} diff --git a/lib/popups/map_popup.dart b/lib/popups/map_popup.dart index 2a7e2e5..6f53d8d 100644 --- a/lib/popups/map_popup.dart +++ b/lib/popups/map_popup.dart @@ -3,209 +3,182 @@ import 'dart:async'; import 'package:animated_toggle_switch/animated_toggle_switch.dart'; import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; -import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:latlong2/latlong.dart'; import '../model/job_tour.dart'; -void showMapPopup(BuildContext context, JobTour currentTour, List tourList) { - showPopupWindow( - context, - //childSize:Size(240, 800), - 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: 300), - onShowStart: (pop) {}, - onShowFinish: (pop) {}, - onDismissStart: (pop) {}, - onDismissFinish: (pop) {}, - onClickOut: (pop) {}, - onClickBack: (pop) {}, - childFun: (pop) { - var mapController = MapController(); - Map> streamController = {}; +showMapPopup(BuildContext context, JobTour currentTour, List tourList) async { + 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) { + var mapController = MapController(); + Map> streamController = {}; - List tourWidgets = []; - for(JobTour tour in tourList) { - var currentStreamController = StreamController(); - streamController[tour.sort] = currentStreamController; + List tourWidgets = []; + for (JobTour tour in tourList) { + var currentStreamController = StreamController(); + streamController[tour.sort] = currentStreamController; - tourWidgets.add( - GestureDetector( - onTap: () async { - mapController.move(LatLng(tour.pos!.lat, tour.pos!.long), mapController.zoom); + tourWidgets.add( + GestureDetector( + onTap: () async { + mapController.move(LatLng(tour.pos!.lat, tour.pos!.long), mapController.zoom); - streamController[currentTour.sort]!.sink.add(false); + streamController[currentTour.sort]!.sink.add(false); - currentTour = tour; - streamController[tour.sort]!.sink.add(true); - }, - child: SizedBox( - width: 70, - height: 80, - child: Column( - children: [ - Container( - height: 50, - width: 70, - color: Colors.transparent, - child: const Icon( - Icons.person_pin_circle, - color: Colors.blue, - size: 56, - ), - ), - const SizedBox(height: 2), - SizedBox( - height: 12.0, - width: 70, - child: Text( - "Station ${tour.sort}", - softWrap: true, - textAlign: TextAlign.center, - style: const TextStyle( - color: Colors.black, - fontSize: 10.0, - ), - ), - ), - StreamBuilder( - stream: currentStreamController.stream, - builder: (context, snapshot) { - bool tourSelected = tour.sort == currentTour.sort; - if (snapshot.hasData) { - tourSelected = snapshot.data as bool; - } - - return Container( - height: 2, - color: tourSelected ? Colors.green : Colors.transparent, - ); - } - ), - ], - ), - ), - ), - ); - } - - final ValueNotifier valueNotifier = ValueNotifier(true); - - List markers = []; - for (var tour in tourList) { - markers.add( - Marker( - builder: (context) => const Icon(Icons.person_pin_circle, size: 56, color: Colors.blue), - point: LatLng(tour.pos!.lat, tour.pos!.long) - ) - ); - } - - return Container( - padding: const EdgeInsets.fromLTRB(30, 0, 30, 0), - key: GlobalKey(), - height: MediaQuery.of(context).size.height * 0.6, - child: Container( - height: 100, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white, - border: Border.all( - color: Colors.grey, - width: 0.5, - ), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - SizedBox( - height: 80, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: tourWidgets, - ), - ) - ), - Row( - children: [ - Expanded( - child: ValueListenableBuilder( - valueListenable: valueNotifier, - builder: (context, value, child) { - return AnimatedToggleSwitch.dual( - current: value, - first: true, - second: false, - dif: 0.0, - borderColor: Colors.transparent, - borderWidth: 5.0, - height: 25, - boxShadow: const [ - BoxShadow( - color: Colors.black26, - spreadRadius: 1, - blurRadius: 2, - offset: Offset(0, 1.5), - ), - ], - onChanged: (b) { - valueNotifier.value = b; - mapController.move(mapController.center, b ? 14.0 : 16.0); - }, - colorBuilder: (b) => b ? Colors.red : Colors.green, - textBuilder: (value) => value - ? const Center(child: Text('Fern')) - : const Center(child: Text('Nah')), - ); - }, - ), - ), - ], - ), - const SizedBox(height: 10), - Expanded( - child: - AbsorbPointer( - absorbing: true, - child: FlutterMap( - mapController: mapController, - options: MapOptions( - center: LatLng(currentTour.pos!.lat, currentTour.pos!.long), - zoom: 14, - ), + currentTour = tour; + streamController[tour.sort]!.sink.add(true); + }, + child: SizedBox( + width: 70, + height: 80, + child: Column( children: [ - TileLayer( - urlTemplate: 'https://google-maps.assecutor.de/vt/lyrs=m@130&hl=en&x={x}&y={y}&z={z}', - userAgentPackageName: 'com.example.app', + Container( + height: 50, + width: 70, + color: Colors.transparent, + child: const Icon( + Icons.person_pin_circle, + color: Colors.blue, + size: 56, + ), ), - MarkerLayer( - markers: markers, + const SizedBox(height: 2), + SizedBox( + height: 12.0, + width: 70, + child: Text( + "Station ${tour.sort}", + softWrap: true, + textAlign: TextAlign.center, + style: const TextStyle( + color: Colors.black, + fontSize: 10.0, + ), + ), ), + StreamBuilder( + stream: currentStreamController.stream, + builder: (context, snapshot) { + bool tourSelected = tour.sort == currentTour.sort; + if (snapshot.hasData) { + tourSelected = snapshot.data as bool; + } + + return Container( + height: 2, + color: tourSelected ? Colors.green : Colors.transparent, + ); + }), ], ), ), ), - ], - ), - ), - ) - ); - }, - ); -} \ No newline at end of file + ); + } + + final ValueNotifier valueNotifier = ValueNotifier(true); + + List markers = []; + for (var tour in tourList) { + markers.add(Marker( + builder: (context) => const Icon(Icons.person_pin_circle, size: 56, color: Colors.blue), + point: LatLng(tour.pos!.lat, tour.pos!.long))); + } + + return Container( + padding: const EdgeInsets.fromLTRB(30, 0, 30, 0), + key: GlobalKey(), + height: MediaQuery.of(context).size.height * 0.6, + child: Container( + height: 100, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 0.5, + ), + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + SizedBox( + height: 80, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: tourWidgets, + ), + )), + Row( + children: [ + Expanded( + child: ValueListenableBuilder( + valueListenable: valueNotifier, + builder: (context, value, child) { + return AnimatedToggleSwitch.dual( + current: value, + first: true, + second: false, + dif: 0.0, + borderColor: Colors.transparent, + borderWidth: 5.0, + height: 25, + boxShadow: const [ + BoxShadow( + color: Colors.black26, + spreadRadius: 1, + blurRadius: 2, + offset: Offset(0, 1.5), + ), + ], + onChanged: (b) { + valueNotifier.value = b; + mapController.move(mapController.center, b ? 14.0 : 16.0); + }, + colorBuilder: (b) => b ? Colors.red : Colors.green, + textBuilder: (value) => value ? const Center(child: Text('Fern')) : const Center(child: Text('Nah')), + ); + }, + ), + ), + ], + ), + const SizedBox(height: 10), + Expanded( + child: AbsorbPointer( + absorbing: true, + child: FlutterMap( + mapController: mapController, + options: MapOptions( + center: LatLng(currentTour.pos!.lat, currentTour.pos!.long), + zoom: 14, + ), + children: [ + TileLayer( + urlTemplate: 'https://google-maps.assecutor.de/vt/lyrs=m@130&hl=en&x={x}&y={y}&z={z}', + userAgentPackageName: 'com.example.app', + ), + MarkerLayer( + markers: markers, + ), + ], + ), + ), + ), + ], + ), + ), + )); + })); + }); +} diff --git a/lib/popups/tasks_popups/arrived_popup.dart b/lib/popups/tasks_popups/arrived_popup.dart index 7fa0983..1ca3a39 100644 --- a/lib/popups/tasks_popups/arrived_popup.dart +++ b/lib/popups/tasks_popups/arrived_popup.dart @@ -1,62 +1,54 @@ 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 showTaskArrivedPopup(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: 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) { - return SizedBox( - key: GlobalKey(), - height: MediaQuery.of(context).size.height * 0.2, - width: MediaQuery.of(context).size.width * 0.8, - child: Container( - height: 100, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white, - border: Border.all( - color: Colors.grey, - width: 0.5, - ), - ), - child: Padding( - padding: const EdgeInsets.all(35.0), - child: Column( - children: [ - Text(taskInfo.task.topic), - const SizedBox(height: 20), - getDefaultButton(taskInfo.task.topic, () => { - onFinished() - }), - ], - ), - ), - )); - }, - ); +showTaskArrivedPopup(BuildContext context, TaskInfo taskInfo, Function() onFinished) async { + 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) { + return SizedBox( + key: GlobalKey(), + height: MediaQuery + .of(context) + .size + .height * 0.2, + width: MediaQuery + .of(context) + .size + .width * 0.8, + child: Container( + height: 100, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 0.5, + ), + ), + child: Padding( + padding: const EdgeInsets.all(35.0), + child: Column( + children: [ + Text(taskInfo.task.topic), + const SizedBox(height: 20), + getDefaultButton(taskInfo.task.topic, () => + { + Navigator.of(context).pop(), + + onFinished() + }), + ], + ), + ), + )); + })); + }); } diff --git a/lib/popups/tasks_popups/commision_number_popup.dart b/lib/popups/tasks_popups/commision_number_popup.dart index 7557270..c2d1f76 100644 --- a/lib/popups/tasks_popups/commision_number_popup.dart +++ b/lib/popups/tasks_popups/commision_number_popup.dart @@ -1,68 +1,53 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/tools/util.dart'; -KumiPopupWindow showComissionNumberPopup(BuildContext context, TaskInfo taskInfo, Function(String) 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: 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) { - TextEditingController textEditingController = TextEditingController(); +showComissionNumberPopup(BuildContext context, TaskInfo taskInfo, Function(String) onFinished) async { + 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) { + TextEditingController textEditingController = TextEditingController(); - return SizedBox( - key: GlobalKey(), - height: 260, - width: MediaQuery.of(context).size.width * 0.8, - child: Container( - height: 100, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white, - border: Border.all( - color: Colors.grey, - width: 0.5, - ), - ), - child: Padding( - padding: const EdgeInsets.all(35.0), - child: Column( - children: [ - const Text('Bitte geben Sie die Kommisionsnummer ein'), - const SizedBox(height: 20), - Util.getDefaultTextField('Kommisionsnummer', - type: TextInputType.text, formatter: [FilteringTextInputFormatter.singleLineFormatter], controller: textEditingController, autofocus: true), - const SizedBox(height: 20), - getDefaultButton('Übernehmen', () => { - onFinished(textEditingController.text) - }) - ], - ), - ), - )); - }, - ); + return SizedBox( + key: GlobalKey(), + height: 260, + width: MediaQuery.of(context).size.width * 0.8, + child: Container( + height: 100, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 0.5, + ), + ), + child: Padding( + padding: const EdgeInsets.all(35.0), + child: Column( + children: [ + const Text('Bitte geben Sie die Kommisionsnummer ein'), + const SizedBox(height: 20), + Util.getDefaultTextField('Kommisionsnummer', + type: TextInputType.text, + formatter: [FilteringTextInputFormatter.singleLineFormatter], + controller: textEditingController, + autofocus: true), + const SizedBox(height: 20), + getDefaultButton('Übernehmen', () => { + Navigator.of(context).pop(), + + onFinished(textEditingController.text)}) + ], + ), + ), + )); + })); + }); } - diff --git a/lib/popups/tasks_popups/pickup_delivery_status_popup.dart b/lib/popups/tasks_popups/pickup_delivery_status_popup.dart index 86be005..1e05236 100644 --- a/lib/popups/tasks_popups/pickup_delivery_status_popup.dart +++ b/lib/popups/tasks_popups/pickup_delivery_status_popup.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -// ignore: unused_import -import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/model/tour_task.dart'; import 'package:stadtbote/tools/util.dart'; @@ -12,7 +10,7 @@ showPickupDeliveryStatusPopup(BuildContext context, TaskInfo taskInfo, Function( entries.add(dropdownMenuEntry); } - await showDialog( + await showDialog( context: context, builder: (BuildContext context) { TourEntry? selectedTourEntry; diff --git a/lib/popups/tasks_popups/receipt_giver_popup.dart b/lib/popups/tasks_popups/receipt_giver_popup.dart index 12ce870..244f8dc 100644 --- a/lib/popups/tasks_popups/receipt_giver_popup.dart +++ b/lib/popups/tasks_popups/receipt_giver_popup.dart @@ -1,68 +1,53 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/tools/util.dart'; -KumiPopupWindow showReceiptGiverPopup(BuildContext context, TaskInfo taskInfo, Function(String) 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: 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) { - TextEditingController textEditingController = TextEditingController(); +showReceiptGiverPopup(BuildContext context, TaskInfo taskInfo, Function(String) onFinished) async { + 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) { + TextEditingController textEditingController = TextEditingController(); - return SizedBox( - key: GlobalKey(), - height: 260, - width: MediaQuery.of(context).size.width * 0.8, - child: Container( - height: 100, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white, - border: Border.all( - color: Colors.grey, - width: 0.5, - ), - ), - child: Padding( - padding: const EdgeInsets.all(35.0), - child: Column( - children: [ - Text(taskInfo.task.topic), - const SizedBox(height: 20), - Util.getDefaultTextField(taskInfo.task.topic, - type: TextInputType.text, formatter: [FilteringTextInputFormatter.singleLineFormatter], controller: textEditingController, autofocus: true), - const SizedBox(height: 20), - getDefaultButton('Übernehmen', () => { - onFinished(textEditingController.text) - }) - ], - ), - ), - )); - }, - ); + return SizedBox( + key: GlobalKey(), + height: 260, + width: MediaQuery.of(context).size.width * 0.8, + child: Container( + height: 100, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 0.5, + ), + ), + child: Padding( + padding: const EdgeInsets.all(35.0), + child: Column( + children: [ + Text(taskInfo.task.topic), + const SizedBox(height: 20), + Util.getDefaultTextField(taskInfo.task.topic, + type: TextInputType.text, + formatter: [FilteringTextInputFormatter.singleLineFormatter], + controller: textEditingController, + autofocus: true), + const SizedBox(height: 20), + getDefaultButton('Übernehmen', () => { + Navigator.of(context).pop(), + + onFinished(textEditingController.text)}) + ], + ), + ), + )); + })); + }); } - diff --git a/lib/popups/tasks_popups/scan_barcodes_popup.dart b/lib/popups/tasks_popups/scan_barcodes_popup.dart index aa35bbe..d865275 100644 --- a/lib/popups/tasks_popups/scan_barcodes_popup.dart +++ b/lib/popups/tasks_popups/scan_barcodes_popup.dart @@ -1,89 +1,56 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_barcode_scanner/flutter_barcode_scanner.dart'; -import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/tools/util.dart'; -KumiPopupWindow showScanBarcodesPopup(BuildContext context, TaskInfo taskInfo, Function(List barcodes) 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: 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) { - List scannedBarcodes = []; +showScanBarcodesPopup(BuildContext context, TaskInfo taskInfo, Function(List barcodes) onFinished) async { + 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) { + List scannedBarcodes = []; - final ValueNotifier> scannedBarcodeWidgetsNotifier = ValueNotifier>([]); + final ValueNotifier> scannedBarcodeWidgetsNotifier = ValueNotifier>([]); - List createBarcodeWidgets() { - List barcodeWidgets = []; + List createBarcodeWidgets() { + List barcodeWidgets = []; - for(var barcode in scannedBarcodes) { - barcodeWidgets.add(SizedBox( - height: 20, - child: Center(child: Text(barcode)), - )); - } + for (var barcode in scannedBarcodes) { + barcodeWidgets.add(SizedBox( + height: 20, + child: Center(child: Text(barcode)), + )); + } - return barcodeWidgets; - } + return barcodeWidgets; + } - void scanBarcode() async { - String barcodeScanResult; - try { - barcodeScanResult = await FlutterBarcodeScanner.scanBarcode('#ff6666', 'Abbrechen', true, ScanMode.QR); + void scanBarcode() async { + String barcodeScanResult; + try { + barcodeScanResult = await FlutterBarcodeScanner.scanBarcode('#ff6666', 'Abbrechen', true, ScanMode.QR); - scannedBarcodes.add(barcodeScanResult); + scannedBarcodes.add(barcodeScanResult); - var barcodeWidgets = createBarcodeWidgets(); + var barcodeWidgets = createBarcodeWidgets(); - scannedBarcodeWidgetsNotifier.value = barcodeWidgets; - } on PlatformException { - barcodeScanResult = 'Failed to get platform version.'; - } - } + scannedBarcodeWidgetsNotifier.value = barcodeWidgets; + } on PlatformException { + barcodeScanResult = 'Failed to get platform version.'; + } + } - return SizedBox( - key: GlobalKey(), - height: 345, - width: MediaQuery.of(context).size.width * 0.8, - child: Container( - height: 100, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white, - border: Border.all( - color: Colors.grey, - width: 0.5, - ), - ), - child: Padding( - padding: const EdgeInsets.all(35.0), - child: Column( - children: [ - const Text('Gescannte Barcodes'), - const SizedBox(height: 20), - Container( + return SizedBox( + key: GlobalKey(), + height: 345, + width: MediaQuery.of(context).size.width * 0.8, + child: Container( + height: 100, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: Colors.white, @@ -92,33 +59,40 @@ KumiPopupWindow showScanBarcodesPopup(BuildContext context, TaskInfo taskInfo, F width: 0.5, ), ), - height: 100, - child: ValueListenableBuilder>( - valueListenable: scannedBarcodeWidgetsNotifier, - builder: (context, value, child) { - return ListView( - padding: const EdgeInsets.all(8), - children: value - ); - }, + child: Padding( + padding: const EdgeInsets.all(35.0), + child: Column( + children: [ + const Text('Gescannte Barcodes'), + const SizedBox(height: 20), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 0.5, + ), + ), + height: 100, + child: ValueListenableBuilder>( + valueListenable: scannedBarcodeWidgetsNotifier, + builder: (context, value, child) { + return ListView(padding: const EdgeInsets.all(8), children: value); + }, + ), + ), + const SizedBox(height: 20), + getDefaultButton('Hinzufügen', buttonHeight: 50, () => {scanBarcode()}), + const SizedBox(height: 10), + getDefaultButton('Übernehmen', buttonHeight: 50, () => { + Navigator.of(context).pop(), + + onFinished(scannedBarcodes)}) + ], + ), ), - ), - const SizedBox(height: 20), - getDefaultButton('Hinzufügen', buttonHeight: 50, () => { - scanBarcode() - }), - const SizedBox(height: 10), - getDefaultButton('Übernehmen', buttonHeight: 50, () => { - onFinished(scannedBarcodes) - }) - ], - ), - ), - )); - }, - ); + )); + })); + }); } - -/* - - */ \ No newline at end of file diff --git a/lib/popups/tasks_popups/signature_popup.dart b/lib/popups/tasks_popups/signature_popup.dart index 9de8272..fd484d3 100644 --- a/lib/popups/tasks_popups/signature_popup.dart +++ b/lib/popups/tasks_popups/signature_popup.dart @@ -1,11 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:signature/signature.dart'; import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/tools/util.dart'; showSignaturePopup(BuildContext context, TaskInfo taskInfo, Function() onFinished) async { - await showDialog( + await showDialog( context: context, builder: (BuildContext context) { return AlertDialog( @@ -46,7 +45,10 @@ showSignaturePopup(BuildContext context, TaskInfo taskInfo, Function() onFinishe backgroundColor: Colors.lightBlueAccent, ), ), - getDefaultButton('Übernehmen', buttonHeight: 50, () => {Navigator.of(context).pop(), onFinished()}) + getDefaultButton('Übernehmen', buttonHeight: 50, () => { + Navigator.of(context).pop(), + + onFinished()}) ], ), ), diff --git a/lib/popups/tasks_popups/station_notice_popup.dart b/lib/popups/tasks_popups/station_notice_popup.dart index fc17a74..13ea778 100644 --- a/lib/popups/tasks_popups/station_notice_popup.dart +++ b/lib/popups/tasks_popups/station_notice_popup.dart @@ -1,76 +1,58 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/tools/util.dart'; -KumiPopupWindow showStationNoticePopup(BuildContext context, TaskInfo taskInfo, Function(String) 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: 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) { - TextEditingController textEditingController = TextEditingController(); +showStationNoticePopup(BuildContext context, TaskInfo taskInfo, Function(String) onFinished) async { + 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) { + TextEditingController textEditingController = TextEditingController(); - return SizedBox( - key: GlobalKey(), - height: 280, - width: MediaQuery.of(context).size.width * 0.8, - child: Container( - height: 100, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white, - border: Border.all( - color: Colors.grey, - width: 0.5, - ), - ), - child: Padding( - padding: const EdgeInsets.all(35.0), - child: Column( - children: [ - Text(taskInfo.task.topic), - const SizedBox(height: 20), - SizedBox( - height: 100, - child: Util.getDefaultTextField(taskInfo.task.topic, - type: TextInputType.text, - maxLines: 10, - formatter: [FilteringTextInputFormatter.singleLineFormatter], - controller: textEditingController, - autofocus: true), + return SizedBox( + key: GlobalKey(), + height: 280, + width: MediaQuery.of(context).size.width * 0.8, + child: Container( + height: 100, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 0.5, + ), ), - const SizedBox(height: 20), - getDefaultButton('Übernehmen', buttonHeight: 50, () => {onFinished(textEditingController.text)}) - ], - ), - ), - )); + child: Padding( + padding: const EdgeInsets.all(35.0), + child: Column( + children: [ + Text(taskInfo.task.topic), + const SizedBox(height: 20), + SizedBox( + height: 100, + child: Util.getDefaultTextField(taskInfo.task.topic, + type: TextInputType.text, + maxLines: 10, + formatter: [FilteringTextInputFormatter.singleLineFormatter], + controller: textEditingController, + autofocus: true), + ), + const SizedBox(height: 20), + getDefaultButton('Übernehmen', buttonHeight: 50, () => { + Navigator.of(context).pop(), + + onFinished(textEditingController.text)}) + ], + ), + ), + )); + })); }, ); } - -/* - - */ diff --git a/lib/popups/tasks_popups/take_photos_popup.dart b/lib/popups/tasks_popups/take_photos_popup.dart index 2070ed4..88af5b4 100644 --- a/lib/popups/tasks_popups/take_photos_popup.dart +++ b/lib/popups/tasks_popups/take_photos_popup.dart @@ -10,7 +10,7 @@ Future showTakePhotosPopup(BuildContext context, TaskInfo taskInfo, Functi ValueNotifier> imageWidgetsListNotifier = ValueNotifier>([]); - await showDialog( + await showDialog( context: context, builder: (BuildContext context) { return AlertDialog( diff --git a/lib/protocoll_messages/fin_task_message.dart b/lib/protocoll_messages/fin_task_message.dart index c4fa977..ef675e9 100644 --- a/lib/protocoll_messages/fin_task_message.dart +++ b/lib/protocoll_messages/fin_task_message.dart @@ -1,3 +1,4 @@ +import 'package:isar/isar.dart'; import 'package:json_annotation/json_annotation.dart'; part 'fin_task_message.g.dart'; @@ -43,6 +44,7 @@ class Task { Map toJson() => _$TaskToJson(this); } +@embedded @JsonSerializable() class FinTaskPos { late double lat; diff --git a/lib/protocoll_messages/fin_task_message.g.dart b/lib/protocoll_messages/fin_task_message.g.dart index 6561d02..911041f 100644 --- a/lib/protocoll_messages/fin_task_message.g.dart +++ b/lib/protocoll_messages/fin_task_message.g.dart @@ -2,6 +2,273 @@ part of 'fin_task_message.dart'; +// ************************************************************************** +// IsarEmbeddedGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const FinTaskPosSchema = Schema( + name: r'FinTaskPos', + id: 7757904122564928017, + properties: { + r'acc': PropertySchema( + id: 0, + name: r'acc', + type: IsarType.long, + ), + r'lat': PropertySchema( + id: 1, + name: r'lat', + type: IsarType.double, + ), + r'long': PropertySchema( + id: 2, + name: r'long', + type: IsarType.double, + ) + }, + estimateSize: _finTaskPosEstimateSize, + serialize: _finTaskPosSerialize, + deserialize: _finTaskPosDeserialize, + deserializeProp: _finTaskPosDeserializeProp, +); + +int _finTaskPosEstimateSize( + FinTaskPos object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + return bytesCount; +} + +void _finTaskPosSerialize( + FinTaskPos object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeLong(offsets[0], object.acc); + writer.writeDouble(offsets[1], object.lat); + writer.writeDouble(offsets[2], object.long); +} + +FinTaskPos _finTaskPosDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = FinTaskPos(); + object.acc = reader.readLong(offsets[0]); + object.lat = reader.readDouble(offsets[1]); + object.long = reader.readDouble(offsets[2]); + return object; +} + +P _finTaskPosDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readLong(offset)) as P; + case 1: + return (reader.readDouble(offset)) as P; + case 2: + return (reader.readDouble(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension FinTaskPosQueryFilter + on QueryBuilder { + QueryBuilder accEqualTo( + int value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'acc', + value: value, + )); + }); + } + + QueryBuilder accGreaterThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'acc', + value: value, + )); + }); + } + + QueryBuilder accLessThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'acc', + value: value, + )); + }); + } + + QueryBuilder accBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'acc', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder latEqualTo( + double value, { + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'lat', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder latGreaterThan( + double value, { + bool include = false, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'lat', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder latLessThan( + double value, { + bool include = false, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'lat', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder latBetween( + double lower, + double upper, { + bool includeLower = true, + bool includeUpper = true, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'lat', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + )); + }); + } + + QueryBuilder longEqualTo( + double value, { + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'long', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder longGreaterThan( + double value, { + bool include = false, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'long', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder longLessThan( + double value, { + bool include = false, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'long', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder longBetween( + double lower, + double upper, { + bool includeLower = true, + bool includeUpper = true, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'long', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + )); + }); + } +} + +extension FinTaskPosQueryObject + on QueryBuilder {} + // ************************************************************************** // JsonSerializableGenerator // ************************************************************************** diff --git a/lib/protocoll_messages/fin_tour_message.dart b/lib/protocoll_messages/fin_tour_message.dart index 54172e4..99678ff 100644 --- a/lib/protocoll_messages/fin_tour_message.dart +++ b/lib/protocoll_messages/fin_tour_message.dart @@ -1,3 +1,4 @@ +import 'package:isar/isar.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:stadtbote/protocoll_messages/accept_job_message.dart'; import 'package:stadtbote/protocoll_messages/fin_task_message.dart'; @@ -6,6 +7,7 @@ part 'fin_tour_message.g.dart'; @JsonSerializable() class FinTourMessage { + @JsonKey(name: 'fin_tour') late FinTour finTour; FinTourMessage(); @@ -40,6 +42,14 @@ class FinTourTask { late String time; + String? val; + + int? code; + + String? sign; + + List? codes; + late FinTaskPos pos; FinTourTask(); diff --git a/lib/protocoll_messages/fin_tour_message.g.dart b/lib/protocoll_messages/fin_tour_message.g.dart index 50edc6a..47ac645 100644 --- a/lib/protocoll_messages/fin_tour_message.g.dart +++ b/lib/protocoll_messages/fin_tour_message.g.dart @@ -2,17 +2,984 @@ part of 'fin_tour_message.dart'; +// ************************************************************************** +// IsarEmbeddedGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +const FinTourTaskSchema = Schema( + name: r'FinTourTask', + id: 8687341112458224246, + properties: { + r'code': PropertySchema( + id: 0, + name: r'code', + type: IsarType.long, + ), + r'codes': PropertySchema( + id: 1, + name: r'codes', + type: IsarType.stringList, + ), + r'pos': PropertySchema( + id: 2, + name: r'pos', + type: IsarType.object, + target: r'FinTaskPos', + ), + r'sId': PropertySchema( + id: 3, + name: r'sId', + type: IsarType.long, + ), + r'sign': PropertySchema( + id: 4, + name: r'sign', + type: IsarType.string, + ), + r'time': PropertySchema( + id: 5, + name: r'time', + type: IsarType.string, + ), + r'val': PropertySchema( + id: 6, + name: r'val', + type: IsarType.string, + ) + }, + estimateSize: _finTourTaskEstimateSize, + serialize: _finTourTaskSerialize, + deserialize: _finTourTaskDeserialize, + deserializeProp: _finTourTaskDeserializeProp, +); + +int _finTourTaskEstimateSize( + FinTourTask object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + { + final list = object.codes; + 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 + + FinTaskPosSchema.estimateSize( + object.pos, allOffsets[FinTaskPos]!, allOffsets); + { + final value = object.sign; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + bytesCount += 3 + object.time.length * 3; + { + final value = object.val; + if (value != null) { + bytesCount += 3 + value.length * 3; + } + } + return bytesCount; +} + +void _finTourTaskSerialize( + FinTourTask object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeLong(offsets[0], object.code); + writer.writeStringList(offsets[1], object.codes); + writer.writeObject( + offsets[2], + allOffsets, + FinTaskPosSchema.serialize, + object.pos, + ); + writer.writeLong(offsets[3], object.sId); + writer.writeString(offsets[4], object.sign); + writer.writeString(offsets[5], object.time); + writer.writeString(offsets[6], object.val); +} + +FinTourTask _finTourTaskDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = FinTourTask(); + object.code = reader.readLongOrNull(offsets[0]); + object.codes = reader.readStringList(offsets[1]); + object.pos = reader.readObjectOrNull( + offsets[2], + FinTaskPosSchema.deserialize, + allOffsets, + ) ?? + FinTaskPos(); + object.sId = reader.readLong(offsets[3]); + object.sign = reader.readStringOrNull(offsets[4]); + object.time = reader.readString(offsets[5]); + object.val = reader.readStringOrNull(offsets[6]); + return object; +} + +P _finTourTaskDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readLongOrNull(offset)) as P; + case 1: + return (reader.readStringList(offset)) as P; + case 2: + return (reader.readObjectOrNull( + offset, + FinTaskPosSchema.deserialize, + allOffsets, + ) ?? + FinTaskPos()) as P; + case 3: + return (reader.readLong(offset)) as P; + case 4: + return (reader.readStringOrNull(offset)) as P; + case 5: + return (reader.readString(offset)) as P; + case 6: + return (reader.readStringOrNull(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +extension FinTourTaskQueryFilter + on QueryBuilder { + QueryBuilder codeIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'code', + )); + }); + } + + QueryBuilder + codeIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'code', + )); + }); + } + + QueryBuilder codeEqualTo( + int? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'code', + value: value, + )); + }); + } + + QueryBuilder codeGreaterThan( + int? value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'code', + value: value, + )); + }); + } + + QueryBuilder codeLessThan( + int? value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'code', + value: value, + )); + }); + } + + QueryBuilder codeBetween( + int? lower, + int? upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'code', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder codesIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'codes', + )); + }); + } + + QueryBuilder + codesIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'codes', + )); + }); + } + + QueryBuilder + codesElementEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'codes', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codesElementGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'codes', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codesElementLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'codes', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codesElementBetween( + 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'codes', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codesElementStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'codes', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codesElementEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'codes', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codesElementContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'codes', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codesElementMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'codes', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder + codesElementIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'codes', + value: '', + )); + }); + } + + QueryBuilder + codesElementIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'codes', + value: '', + )); + }); + } + + QueryBuilder + codesLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'codes', + length, + true, + length, + true, + ); + }); + } + + QueryBuilder codesIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'codes', + 0, + true, + 0, + true, + ); + }); + } + + QueryBuilder + codesIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'codes', + 0, + false, + 999999, + true, + ); + }); + } + + QueryBuilder + codesLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'codes', + 0, + true, + length, + include, + ); + }); + } + + QueryBuilder + codesLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'codes', + length, + include, + 999999, + true, + ); + }); + } + + QueryBuilder + codesLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.listLength( + r'codes', + lower, + includeLower, + upper, + includeUpper, + ); + }); + } + + QueryBuilder sIdEqualTo( + int value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'sId', + value: value, + )); + }); + } + + QueryBuilder sIdGreaterThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'sId', + value: value, + )); + }); + } + + QueryBuilder sIdLessThan( + int value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'sId', + value: value, + )); + }); + } + + QueryBuilder sIdBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'sId', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder signIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'sign', + )); + }); + } + + QueryBuilder + signIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'sign', + )); + }); + } + + QueryBuilder signEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'sign', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder signGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'sign', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder signLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'sign', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder signBetween( + 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'sign', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder signStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'sign', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder signEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'sign', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder signContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'sign', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder signMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'sign', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder signIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'sign', + value: '', + )); + }); + } + + QueryBuilder + signIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'sign', + value: '', + )); + }); + } + + QueryBuilder timeEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'time', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder timeGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'time', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder timeLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'time', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder timeBetween( + 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'time', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder timeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'time', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder timeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'time', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder timeContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'time', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder timeMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'time', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder timeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'time', + value: '', + )); + }); + } + + QueryBuilder + timeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'time', + value: '', + )); + }); + } + + QueryBuilder valIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'val', + )); + }); + } + + QueryBuilder valIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'val', + )); + }); + } + + QueryBuilder valEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'val', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valGreaterThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'val', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valLessThan( + String? value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'val', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valBetween( + 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'val', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'val', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'val', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valContains( + String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'val', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'val', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder valIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'val', + value: '', + )); + }); + } + + QueryBuilder + valIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'val', + value: '', + )); + }); + } +} + +extension FinTourTaskQueryObject + on QueryBuilder { + QueryBuilder pos( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.object(q, r'pos'); + }); + } +} + // ************************************************************************** // JsonSerializableGenerator // ************************************************************************** FinTourMessage _$FinTourMessageFromJson(Map json) => FinTourMessage() - ..finTour = FinTour.fromJson(json['finTour'] as Map); + ..finTour = FinTour.fromJson(json['fin_tour'] as Map); Map _$FinTourMessageToJson(FinTourMessage instance) => { - 'finTour': instance.finTour, + 'fin_tour': instance.finTour, }; FinTour _$FinTourFromJson(Map json) => FinTour() @@ -33,11 +1000,19 @@ Map _$FinTourToJson(FinTour instance) => { FinTourTask _$FinTourTaskFromJson(Map json) => FinTourTask() ..sId = json['s_id'] as int ..time = json['time'] as String + ..val = json['val'] as String? + ..code = json['code'] as int? + ..sign = json['sign'] as String? + ..codes = (json['codes'] as List?)?.map((e) => e as String).toList() ..pos = FinTaskPos.fromJson(json['pos'] as Map); Map _$FinTourTaskToJson(FinTourTask instance) => { 's_id': instance.sId, 'time': instance.time, + 'val': instance.val, + 'code': instance.code, + 'sign': instance.sign, + 'codes': instance.codes, 'pos': instance.pos, }; diff --git a/lib/tools/mqtt_core.dart b/lib/tools/mqtt_core.dart index 91bdfb4..bc524b4 100644 --- a/lib/tools/mqtt_core.dart +++ b/lib/tools/mqtt_core.dart @@ -431,24 +431,25 @@ class MqttCore { } void _startTrackTimer() { - _trackTimer = Timer(const Duration(seconds: 60), () { - var position = MyApp.currentPosition; - if (position != null) { - var trackMessage = TrackMessage(); - trackMessage.pos = TrackPosition(); - trackMessage.pos.time = position.timestamp.toIso8601String(); - trackMessage.pos.lat = position.latitude; - trackMessage.pos.long = position.longitude; - trackMessage.pos.acc = position.accuracy.toInt(); + _trackTimer ??= Timer.periodic(const Duration(seconds: 60), (Timer t) { + var position = MyApp.currentPosition; + if (position != null) { + var trackMessage = TrackMessage(); + trackMessage.pos = TrackPosition(); + trackMessage.pos.time = position.timestamp.toIso8601String(); + trackMessage.pos.lat = position.latitude; + trackMessage.pos.long = position.longitude; + trackMessage.pos.acc = position.accuracy.toInt(); - publishPayloadMessage("track", trackMessage.toJson()); - } - }); + publishPayloadMessage("track", trackMessage.toJson()); + } + }); } void _cancelTrackTimer() { if (_trackTimer != null && _trackTimer!.isActive) { _trackTimer!.cancel(); + _trackTimer = null; } } } diff --git a/lib/tools/util.dart b/lib/tools/util.dart index d7bf9ab..ad58dac 100644 --- a/lib/tools/util.dart +++ b/lib/tools/util.dart @@ -1,3 +1,4 @@ +import 'dart:developer'; import 'dart:io'; import 'package:audioplayers/audioplayers.dart'; @@ -72,11 +73,11 @@ class Util { } static logInfo(String message) { - debugPrint(message); + log(message); } static logException(String message) { - debugPrint('Exception: $message'); + log('Exception: $message'); } static int fastHash(String string) { diff --git a/pubspec.lock b/pubspec.lock index 28203b5..86ef3d3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -784,14 +784,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.7.1" - kumi_popup_window: - dependency: "direct main" - description: - name: kumi_popup_window - sha256: "3159a2ee307850ab3520cfb162efc1e330aac2e560569e20227bf2ac93ec06d5" - url: "https://pub.dev" - source: hosted - version: "2.0.1" latlong2: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index b076b45..efc11ad 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -53,7 +53,6 @@ dependencies: intl: ^0.18.0 another_stepper: ^1.2.2 easy_stepper: ^0.6.0 - kumi_popup_window: ^2.0.1 flutter_osm_plugin: ^0.53.4+1 routing_client_dart: ^0.4.2 animated_toggle_switch: ^0.6.2