Files
stadtbote-app/lib/popups/tasks_popups/zip_popup.dart
T
2026-02-25 10:40:29 +01:00

102 lines
4.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:stadtbote/tools/app_localizations.dart';
import 'package:stadtbote/tools/util.dart';
showZipPopup(BuildContext context, String text, String buttonText,
Function(String) onFinished) async {
final TextEditingController textEditingController = TextEditingController();
final FocusNode focusNode = FocusNode();
await showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return PopScope(
canPop: false,
onPopInvokedWithResult: (bool didPop, dynamic result) async {
if (!didPop) {
final shouldPop = await taskDialogSecurityException(context);
if (shouldPop && context.mounted) {
Navigator.of(context).pop();
}
}
},
child: AlertDialog(
contentPadding: EdgeInsets.zero,
shadowColor: Colors.transparent,
backgroundColor: Colors.white,
content: StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (context.mounted && !focusNode.hasFocus) {
focusNode.requestFocus();
}
});
return SizedBox(
key: GlobalKey(),
height: 293,
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(text,
style: const TextStyle(
fontWeight: FontWeight.bold)),
const SizedBox(height: 20),
Util.getDefaultTextField('zip'.tr,
formatter: [
FilteringTextInputFormatter.digitsOnly,
LengthLimitingTextInputFormatter(5),
],
textInputType: TextInputType.number,
controller: textEditingController,
focusNode: focusNode,
autofocus: true),
const SizedBox(height: 20),
getDefaultButton(
buttonText,
() {
if (_checkInput(context,
textEditingController.text)) {
final result = textEditingController.text;
textEditingController.dispose();
focusNode.dispose();
Navigator.of(context).pop();
onFinished(result);
}
}),
],
),
),
));
})));
});
}
bool _checkInput(BuildContext context, String input) {
String message = '';
if (input.length != 5) {
message += 'enter_zip'.tr;
}
if (message.isNotEmpty) {
showAlertDialog('error'.tr, message);
}
return message.isEmpty;
}