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; }