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