From f9ee90d8610725daaf9fe65818cbf659285be025 Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Wed, 14 Feb 2024 15:54:46 +0100 Subject: [PATCH] Erweiterungen --- lib/content_views/task_list_page.dart | 3 +- lib/main.dart | 2 +- ...age.dart => pop_content_view_message.dart} | 0 lib/model/task_info.dart | 1 - .../tasks_popups/commision_number_popup.dart | 2 +- .../tasks_popups/receipt_giver_popup.dart | 2 +- .../tasks_popups/station_notice_popup.dart | 2 +- lib/popups/tasks_popups/zip_popup.dart | 32 +++++++++++++------ lib/protocoll_messages/fin_tour_message.dart | 1 - lib/tools/messages/ranking_updated.dart | 1 - lib/tools/mqtt_core.dart | 4 +-- lib/tools/util.dart | 32 +++++++++++++++++-- 12 files changed, 59 insertions(+), 23 deletions(-) rename lib/messages/{PopContentViewMessage.dart => pop_content_view_message.dart} (100%) diff --git a/lib/content_views/task_list_page.dart b/lib/content_views/task_list_page.dart index 167d0e0..5541986 100644 --- a/lib/content_views/task_list_page.dart +++ b/lib/content_views/task_list_page.dart @@ -1,13 +1,12 @@ 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:stadtbote/content_views/utils/content_view_widget.dart'; import 'package:stadtbote/content_views/utils/header_info.dart'; -import 'package:stadtbote/messages/PopContentViewMessage.dart'; +import 'package:stadtbote/messages/pop_content_view_message.dart'; import 'package:stadtbote/model/job.dart'; import 'package:stadtbote/model/job_tour.dart'; import 'package:stadtbote/popups/tasks_popups/arrived_popup.dart'; diff --git a/lib/main.dart b/lib/main.dart index dac7b65..a3f74ad 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:stadtbote/messages/PopContentViewMessage.dart'; +import 'package:stadtbote/messages/pop_content_view_message.dart'; import 'package:stadtbote/model/message.dart'; import 'package:stadtbote/model/ranking.dart'; import 'package:stadtbote/model/status.dart'; diff --git a/lib/messages/PopContentViewMessage.dart b/lib/messages/pop_content_view_message.dart similarity index 100% rename from lib/messages/PopContentViewMessage.dart rename to lib/messages/pop_content_view_message.dart diff --git a/lib/model/task_info.dart b/lib/model/task_info.dart index 033baec..c4f9bce 100644 --- a/lib/model/task_info.dart +++ b/lib/model/task_info.dart @@ -1,6 +1,5 @@ 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/tasks_popups/commision_number_popup.dart b/lib/popups/tasks_popups/commision_number_popup.dart index c2d1f76..e39411a 100644 --- a/lib/popups/tasks_popups/commision_number_popup.dart +++ b/lib/popups/tasks_popups/commision_number_popup.dart @@ -35,7 +35,7 @@ showComissionNumberPopup(BuildContext context, TaskInfo taskInfo, Function(Strin const Text('Bitte geben Sie die Kommisionsnummer ein'), const SizedBox(height: 20), Util.getDefaultTextField('Kommisionsnummer', - type: TextInputType.text, + textInputType: TextInputType.text, formatter: [FilteringTextInputFormatter.singleLineFormatter], controller: textEditingController, autofocus: true), diff --git a/lib/popups/tasks_popups/receipt_giver_popup.dart b/lib/popups/tasks_popups/receipt_giver_popup.dart index 244f8dc..a303387 100644 --- a/lib/popups/tasks_popups/receipt_giver_popup.dart +++ b/lib/popups/tasks_popups/receipt_giver_popup.dart @@ -35,7 +35,7 @@ showReceiptGiverPopup(BuildContext context, TaskInfo taskInfo, Function(String) Text(taskInfo.task.topic), const SizedBox(height: 20), Util.getDefaultTextField(taskInfo.task.topic, - type: TextInputType.text, + textInputType: TextInputType.text, formatter: [FilteringTextInputFormatter.singleLineFormatter], controller: textEditingController, autofocus: true), diff --git a/lib/popups/tasks_popups/station_notice_popup.dart b/lib/popups/tasks_popups/station_notice_popup.dart index 13ea778..6974bd8 100644 --- a/lib/popups/tasks_popups/station_notice_popup.dart +++ b/lib/popups/tasks_popups/station_notice_popup.dart @@ -37,7 +37,7 @@ showStationNoticePopup(BuildContext context, TaskInfo taskInfo, Function(String) SizedBox( height: 100, child: Util.getDefaultTextField(taskInfo.task.topic, - type: TextInputType.text, + textInputType: TextInputType.text, maxLines: 10, formatter: [FilteringTextInputFormatter.singleLineFormatter], controller: textEditingController, diff --git a/lib/popups/tasks_popups/zip_popup.dart b/lib/popups/tasks_popups/zip_popup.dart index d43b924..936acd7 100644 --- a/lib/popups/tasks_popups/zip_popup.dart +++ b/lib/popups/tasks_popups/zip_popup.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:stadtbote/model/task_info.dart'; import 'package:stadtbote/tools/util.dart'; showZipPopup(BuildContext context, String text, String buttonText, Function(String) onFinished) async { @@ -32,18 +30,20 @@ showZipPopup(BuildContext context, String text, String buttonText, Function(Stri padding: const EdgeInsets.all(35.0), child: Column( children: [ - Text(text, style: TextStyle(fontWeight: FontWeight.bold)), + Text(text, style: const TextStyle(fontWeight: FontWeight.bold)), const SizedBox(height: 20), Util.getDefaultTextField('Postleitzahl', - type: TextInputType.text, - formatter: [FilteringTextInputFormatter.singleLineFormatter], + formatter: [DecimalTextInputFormatter(maxLength: 5, decimalPlaces: 0)], + textInputType: const TextInputType.numberWithOptions(signed: true, decimal: true), controller: textEditingController, autofocus: true), const SizedBox(height: 20), - getDefaultButton(buttonText, () => { - Navigator.of(context).pop(), - - onFinished(textEditingController.text)}) + getDefaultButton( + buttonText, + () => { + if (_checkInput(context, textEditingController.text)) + {Navigator.of(context).pop(), onFinished(textEditingController.text)}, + }), ], ), ), @@ -51,3 +51,17 @@ showZipPopup(BuildContext context, String text, String buttonText, Function(Stri })); }); } + +bool _checkInput(BuildContext context, String input) { + String message = ''; + + if (input.length != 5) { + message += 'Bitte geben Sie eine fünfstellige Postleitzahl ein'; + } + + if (message.isNotEmpty) { + showAlertDialog(context, 'Fehler', message); + } + + return message.isEmpty; +} diff --git a/lib/protocoll_messages/fin_tour_message.dart b/lib/protocoll_messages/fin_tour_message.dart index 99678ff..c453321 100644 --- a/lib/protocoll_messages/fin_tour_message.dart +++ b/lib/protocoll_messages/fin_tour_message.dart @@ -1,4 +1,3 @@ -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'; diff --git a/lib/tools/messages/ranking_updated.dart b/lib/tools/messages/ranking_updated.dart index 8fd63df..d568ef8 100644 --- a/lib/tools/messages/ranking_updated.dart +++ b/lib/tools/messages/ranking_updated.dart @@ -1,4 +1,3 @@ -import 'package:stadtbote/model/status.dart'; class RankingUpdated { RankingUpdated(); diff --git a/lib/tools/mqtt_core.dart b/lib/tools/mqtt_core.dart index 0e712fa..c876d0c 100644 --- a/lib/tools/mqtt_core.dart +++ b/lib/tools/mqtt_core.dart @@ -56,9 +56,9 @@ class MqttCore { late int _reconnectDelay = 0; - late Timer? _reconnectTimer = null; + Timer? _reconnectTimer; - late Timer? _trackTimer = null; + Timer? _trackTimer; MqttCore() { _disconnectInProgress = false; diff --git a/lib/tools/util.dart b/lib/tools/util.dart index 7e627b0..2f6568b 100644 --- a/lib/tools/util.dart +++ b/lib/tools/util.dart @@ -117,7 +117,7 @@ class Util { FocusNode? focusNode, IconButton? iconButton, int? maxLines = 1, - TextInputType? type, + TextInputType? textInputType, List? formatter, Function()? onTap, bool? autofocus}) { @@ -135,7 +135,7 @@ class Util { focusNode: focusNode, maxLines: maxLines, onTap: onTap, - keyboardType: type, + keyboardType: textInputType, inputFormatters: formatter, autofocus: (autofocus != null) ? autofocus : false, decoration: InputDecoration( @@ -337,4 +337,30 @@ Future showAlertDialog(BuildContext context, String title, String message) ); } ); -} \ No newline at end of file +} + +class DecimalTextInputFormatter extends TextInputFormatter { + int maxLength; + + int decimalPlaces; + + DecimalTextInputFormatter({required this.maxLength, required this.decimalPlaces}); + + @override + TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) { + var text = newValue.text; + String? filteredText = ""; + + if (text != "") { + RegExp regExp; + if (decimalPlaces > 0) { + regExp = RegExp(r'[0-9]+[,]{0,1}[0-9]{0,' + decimalPlaces.toString() + '}'); + } else { + regExp = RegExp(r'[0-9]{0,' + maxLength.toString() +'}'); + } + filteredText = regExp.stringMatch(text); + } + + return TextEditingValue(text: filteredText ?? oldValue.text); + } +}