input method

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

Implementation

Future<String?> input({
  BuildContext? context,
  Widget? title,
  bool obscureText = false,
  bool autofocus = false,
  TextInputType? keyboardType,
  InputDecoration decoration = const InputDecoration(),
}) async {
  var ctrl = TextEditingController();
  var nav = navigator(context);
  return await withChild(
    AlertDialog(
      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);
}