input method

Future<String?> input({
  1. BuildContext? context,
  2. Widget? title,
  3. Widget? icon,
  4. bool obscureText = false,
  5. bool autofocus = false,
  6. TextInputType? keyboardType,
  7. InputDecoration decoration = const InputDecoration(),
  8. TextEditingController? controller,
})

Implementation

Future<String?> input({
  BuildContext? context,
  Widget? title,
  Widget? icon,
  bool obscureText = false,
  bool autofocus = false,
  TextInputType? keyboardType,
  InputDecoration decoration = const InputDecoration(),
  TextEditingController? controller,
}) async {
  var ctrl = controller ?? TextEditingController();
  var nav = navigator(context);
  return await withChild(
    AlertDialog(
      icon: icon,
      title: title,
      content: Padding(
        padding: const EdgeInsets.all(8),
        child: TextField(
          obscureText: obscureText,
          decoration: decoration,
          autofocus: autofocus,
          controller: ctrl,
          keyboardType: keyboardType,
          onSubmitted: (value) => nav.pop(value),
        ),
      ),
      actions: [
        TextButton(
          onPressed: () {
            var text = ctrl.text;
            if (text.isEmpty) {
              nav.pop(null);
            } else {
              nav.pop(text);
            }
            ctrl.dispose();
          },
          child: Text(
            MaterialLocalizations.of(context ?? this.context!).okButtonLabel,
          ),
        ),
      ],
    ),
  ).prompt(context: context);
}