diff --git a/lib/widgets/adaptive_dialogs/dialog_text_field.dart b/lib/widgets/adaptive_dialogs/dialog_text_field.dart index 7b8e07b26..7838da05f 100644 --- a/lib/widgets/adaptive_dialogs/dialog_text_field.dart +++ b/lib/widgets/adaptive_dialogs/dialog_text_field.dart @@ -10,7 +10,7 @@ class DialogTextField extends StatelessWidget { final String? prefixText; final String? suffixText; final String? errorText; - final bool obscureText = false; + final bool obscureText; final bool isDestructive = false; final int? minLines; final int? maxLines; @@ -35,6 +35,7 @@ class DialogTextField extends StatelessWidget { this.controller, this.counterText, this.errorText, + this.obscureText = false, // #Pangea this.onSubmitted, // Pangea# @@ -73,23 +74,26 @@ class DialogTextField extends StatelessWidget { ); case TargetPlatform.iOS: case TargetPlatform.macOS: + final placeholder = labelText ?? hintText; return Column( - mainAxisSize: MainAxisSize.min, children: [ - CupertinoTextField( - controller: controller, - obscureText: obscureText, - minLines: minLines, - maxLines: maxLines, - maxLength: maxLength, - keyboardType: keyboardType, - autocorrect: autocorrect, - prefix: prefixText != null ? Text(prefixText) : null, - suffix: suffixText != null ? Text(suffixText) : null, - placeholder: labelText ?? hintText, - // #Pangea - onSubmitted: onSubmitted, - // Pangea# + SizedBox( + height: placeholder == null ? null : ((maxLines ?? 1) + 1) * 20, + child: CupertinoTextField( + controller: controller, + obscureText: obscureText, + minLines: minLines, + maxLines: maxLines, + maxLength: maxLength, + keyboardType: keyboardType, + autocorrect: autocorrect, + prefix: prefixText != null ? Text(prefixText) : null, + suffix: suffixText != null ? Text(suffixText) : null, + placeholder: placeholder, + // #Pangea + onSubmitted: onSubmitted, + // Pangea# + ), ), if (errorText != null) Text( diff --git a/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart b/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart index 05c158c0b..cba2d7247 100644 --- a/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart +++ b/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart @@ -37,91 +37,89 @@ Future showTextInputDialog({ useRootNavigator: useRootNavigator, builder: (context) { final error = ValueNotifier(null); - return ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 512), - child: AlertDialog.adaptive( - title: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 256), - child: Text(title), - ), - content: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 256), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (message != null) - SelectableLinkify( - text: message, - textScaleFactor: MediaQuery.textScalerOf(context).scale(1), - linkStyle: TextStyle( - color: Theme.of(context).colorScheme.primary, - decorationColor: Theme.of(context).colorScheme.primary, - ), - options: const LinkifyOptions(humanize: false), - onOpen: (url) => UrlLauncher(context, url.url).launchUrl(), - ), - const SizedBox(height: 16), - ValueListenableBuilder( - valueListenable: error, - builder: (context, error, _) { - return DialogTextField( - hintText: hintText, - errorText: error, - labelText: labelText, - controller: controller, - initialText: initialText, - prefixText: prefixText, - suffixText: suffixText, - // #Pangea - // minLines: minLines, - // maxLines: maxLines, - minLines: autoSubmit ? 1 : minLines, - maxLines: autoSubmit ? 1 : maxLines, - onSubmitted: autoSubmit - ? (_) { - final input = controller.text; - final errorText = validator?.call(input); - if (errorText != null) { - error = errorText; - return; - } - Navigator.of(context).pop(input); - } - : null, - // Pangea# - maxLength: maxLength, - keyboardType: keyboardType, - ); - }, - ), - ], - ), - ), - actions: [ - AdaptiveDialogAction( - onPressed: () => Navigator.of(context).pop(null), - child: Text(cancelLabel ?? L10n.of(context).cancel), - ), - AdaptiveDialogAction( - onPressed: () { - final input = controller.text; - final errorText = validator?.call(input); - if (errorText != null) { - error.value = errorText; - return; - } - Navigator.of(context).pop(input); - }, - autofocus: true, - child: Text( - okLabel ?? L10n.of(context).ok, - style: isDestructive - ? TextStyle(color: Theme.of(context).colorScheme.error) - : null, - ), - ), - ], + return AlertDialog.adaptive( + title: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: Text(title), ), + content: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (message != null) + SelectableLinkify( + text: message, + textScaleFactor: MediaQuery.textScalerOf(context).scale(1), + linkStyle: TextStyle( + color: Theme.of(context).colorScheme.primary, + decorationColor: Theme.of(context).colorScheme.primary, + ), + options: const LinkifyOptions(humanize: false), + onOpen: (url) => UrlLauncher(context, url.url).launchUrl(), + ), + const SizedBox(height: 16), + ValueListenableBuilder( + valueListenable: error, + builder: (context, error, _) { + return DialogTextField( + hintText: hintText, + errorText: error, + labelText: labelText, + controller: controller, + initialText: initialText, + prefixText: prefixText, + suffixText: suffixText, + // #Pangea + // minLines: minLines, + // maxLines: maxLines, + minLines: autoSubmit ? 1 : minLines, + maxLines: autoSubmit ? 1 : maxLines, + onSubmitted: autoSubmit + ? (_) { + final input = controller.text; + final errorText = validator?.call(input); + if (errorText != null) { + error = errorText; + return; + } + Navigator.of(context).pop(input); + } + : null, + // Pangea# + maxLength: maxLength, + keyboardType: keyboardType, + obscureText: obscureText, + ); + }, + ), + ], + ), + ), + actions: [ + AdaptiveDialogAction( + onPressed: () => Navigator.of(context).pop(null), + child: Text(cancelLabel ?? L10n.of(context).cancel), + ), + AdaptiveDialogAction( + onPressed: () { + final input = controller.text; + final errorText = validator?.call(input); + if (errorText != null) { + error.value = errorText; + return; + } + Navigator.of(context).pop(input); + }, + autofocus: true, + child: Text( + okLabel ?? L10n.of(context).ok, + style: isDestructive + ? TextStyle(color: Theme.of(context).colorScheme.error) + : null, + ), + ), + ], ); }, );