inputDialog static method

Future<String?> inputDialog({
  1. required String title,
  2. required String hint,
  3. dynamic onSubmit(
    1. String
    )?,
  4. VoidCallback? onCancel,
  5. String defaultValue = "",
  6. String? submitText,
  7. String? cancelText,
  8. int lines = 4,
  9. TextInputType keyboardType = TextInputType.multiline,
  10. bool obscureText = false,
  11. String? validator(
    1. String?
    )?,
})

Implementation

static Future<String?> inputDialog({
  required String title,
  required String hint,
  Function(String)? onSubmit,
  VoidCallback? onCancel,
  String defaultValue = "",
  String? submitText,
  String? cancelText,
  int lines = 4,
  TextInputType keyboardType = TextInputType.multiline,
  bool obscureText = false,
  String? Function(String?)? validator,
}) async {
  final TextEditingController controller = TextEditingController(text: defaultValue);
  final GlobalKey<FormState> formKey = GlobalKey<FormState>();
  final String? text = await showDialog<String>(
    context: navigatorKey.currentContext!,
    builder: (BuildContext context) => AlertDialog.adaptive(
      title: Text(title),
      content: Material(
        type: MaterialType.transparency,
        child: Form(
          key: formKey,
          child: UTextField(
            hintText: hint,
            lines: lines,
            controller: controller,
            obscureText: obscureText,
            keyboardType: keyboardType,
            validator: validator,
            contentPadding: const EdgeInsets.symmetric(vertical: 16, horizontal: 8),
          ),
        ),
      ),
      actions: <Widget>[
        TextButton(onPressed: onCancel ?? back, child: Text(cancelText ?? U.s.cancel)),
        TextButton(
          onPressed: () {
            if (validator == null || (formKey.currentState?.validate() ?? true)) back(controller.text);
          },
          child: Text(submitText ?? U.s.submit),
        ),
      ],
    ),
  );
  controller.dispose();
  if (text != null && onSubmit != null) {
    onSubmit(text);
  }
  return text;
}