input<T> static method

Future<T?> input<T>(
  1. BuildContext context, {
  2. String title = "Input Form",
  3. String? content,
  4. bool barrierDismisable = true,
  5. required List<PopupWidgetInputModel> data,
  6. required dynamic onOk(),
  7. String okText = "Confirm",
  8. Color color = Colors.blue,
  9. dynamic onTapInput({
    1. PopupWidgetInputModel inputForm,
    })?,
})

Implementation

static Future<T?> input<T>(
  BuildContext context, {
  String title = "Input Form",
  String? content,
  bool barrierDismisable = true,
  required List<PopupWidgetInputModel> data,
  required Function() onOk,
  String okText = "Confirm",
  Color color = Colors.blue,
  Function({PopupWidgetInputModel inputForm})? onTapInput,
}) async {
  var size = MediaQuery.of(context).size;
  var dialog = Dialog(
    backgroundColor: Colors.white,
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(10),
    ),
    child: StatefulBuilder(builder: (context, setState) {
      return Container(
        width: _isLargeDevice(size) ? 350 : size.width - 40,
        constraints: BoxConstraints(
          maxHeight: size.height - 80,
        ),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(10),
          color: Colors.white,
        ),
        child: SingleChildScrollView(
          child: Container(
            padding: const EdgeInsets.symmetric(horizontal: 20),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                const SizedBox(height: 10),
                Text(
                  title,
                  style: Theme.of(context).textTheme.bodyText1!.copyWith(
                        fontWeight: FontWeight.bold,
                      ),
                ),
                if (content != null) const Divider(),
                if (content != null) Text(content),
                const Divider(),
                ...data.map((e) {
                  return Container(
                    padding: const EdgeInsets.only(bottom: 10),
                    width: double.infinity,
                    child: Column(
                      mainAxisSize: MainAxisSize.min,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Text(
                          e.title,
                          style:
                              Theme.of(context).textTheme.bodyText1!.copyWith(
                                    fontWeight: FontWeight.bold,
                                  ),
                        ),
                        const SizedBox(height: 5),
                        TextFieldWidget(
                          controller: e.controller,
                          enabled: e.enable,
                          hint: e.hint,
                          keyboardType: e.keyboardType,
                          obscureText: e.isObsecure,
                          onTap: () {
                            if (onTapInput != null) onTapInput(inputForm: e);
                          },
                        ),
                        const SizedBox(height: 10),
                      ],
                    ),
                  );
                }).toList(),
                const Divider(),
                SizedBox(
                  width: double.infinity,
                  child: ButtonWidget(
                    onPressed: () {
                      onOk();
                    },
                    text: okText,
                    borderColor: color,
                    background: color,
                  ),
                ),
                const SizedBox(height: 10),
              ],
            ),
          ),
        ),
      );
    }),
  );
  return showDialog(
      context: context,
      barrierDismissible: barrierDismisable,
      builder: (context) {
        return dialog;
      });
}