inputDialog static method

Future<String?> inputDialog({
  1. required BuildContext context,
  2. required String title,
  3. String? defaultValue,
  4. String okButtonName = 'OK',
  5. String hintText = 'Type here',
  6. FormFieldValidator<String>? validator,
})

Shows an input dialog for text entry.

Parameters:

  • context: The build context
  • title: Dialog title text
  • defaultValue: Optional default value for the text field
  • okButtonName: OK button label. Defaults to 'OK'
  • hintText: Text field hint. Defaults to 'Type here'
  • validator: Optional form field validator

Returns a Future that completes with the entered text or null if canceled.

Implementation

static Future<String?> inputDialog(
    {required BuildContext context,
    required String title,
    String? defaultValue,
    String okButtonName = 'OK',
    String hintText = 'Type here',
    FormFieldValidator<String>? validator}) {
  TextEditingController controller = TextEditingController();
  GlobalKey<FormState> formKey = GlobalKey();

  if (defaultValue.hasValue) {
    controller.text = defaultValue!;
  }

  return showDialog(
      context: context,
      builder: (context) {
        return AlertDialog(
            title: Text(title),
            content: Form(
              key: formKey,
              child: TextFormField(
                controller: controller,
                validator: validator,
                decoration: InputDecoration(
                    icon: const Icon(Icons.edit_note), hintText: hintText),
              ),
            ),
            actions: [
              TextButton(
                  onPressed: () {
                    if (!formKey.currentState!.validate()) {
                      return;
                    }

                    context.navigator.pop(controller.text);
                  },
                  child: Text(okButtonName)),
              TextButton(
                  onPressed: () => context.navigator.pop(),
                  child: const Text('Cancel'))
            ]);
      });
}