input method

Future input(
  1. BuildContext context, {
  2. required String title,
  3. required String? message,
  4. required String label,
  5. PopupButton? confirmButton,
  6. PopupButton? cancelButton,
  7. Icon? icon,
  8. FormFieldValidator? validator,
  9. TextInputType? keyboardType,
  10. String? initialValue,
})

Implementation

Future<dynamic> input(
  BuildContext context, {
  required String title,
  required String? message,
  required String label,
  PopupButton? confirmButton,
  PopupButton? cancelButton,
  Icon? icon,
  FormFieldValidator? validator,
  TextInputType? keyboardType,
  String? initialValue,
}) {
  final formState = GlobalKey<FormState>();
  final inputController = TextEditingController();
  onSubmit(String value) {
    final result = formState.currentState?.validate();
    if (result == true) {
      Navigator.of(context).pop(value);
    }
  }

  return PopupDialog(
    header: PopupHeader(
      icon: icon,
      title: PopupText(text: title),
    ),
    content: PopupInput(
      label: PopupText(text: label),
      message: message != null ? PopupText(text: message) : null,
      config: config,
      formState: formState,
      controller: inputController,
      onSubmit: onSubmit,
      validator: validator,
      keyboardType: keyboardType,
      initialValue: initialValue,
    ),
    config: config,
    buttons: [
      cancelButton ??
          PopupButton(
            label: config.cancelButtonLabel,
            color: config.cancelButtonColor ?? Colors.grey.withOpacity(0.6),
            onPressed: () {
              Navigator.of(context).pop(false);
            },
          ),
      confirmButton ??
          PopupButton(
            label: config.submitButtonLabel,
            color: config.colorByType[PopupType.input] ?? Colors.blue,
            onPressed: () {
              onSubmit(inputController.text);
            },
          ),
    ],
  ).show(context);
}