documentWidget static method

Widget documentWidget({
  1. required String labelText,
  2. required dynamic document,
  3. required String noDocument,
  4. required dynamic documentPickerOnTap()?,
  5. required String? validator(
    1. String?
    )?,
  6. bool isMandatory = false,
  7. AutovalidateMode? autovalidateMode,
  8. required Size size,
})

Implementation

static Widget documentWidget({
  required String labelText,
  required dynamic document,
  required String noDocument,
  required dynamic Function()? documentPickerOnTap,
  required String? Function(String?)? validator,
  bool isMandatory = false,
  AutovalidateMode? autovalidateMode,
  required Size size,
}) {
  return FormField(
    validator: validator,
    builder: (field) => Column(
      children: [
        Container(
          decoration: BoxDecoration(
            border: Border.all(width: 1.0, color: Colors.black45),
            borderRadius: const BorderRadius.all(Radius.circular(10.0)),
          ),
          child: Column(
            children: [
              const SizedBox(
                height: 10.0,
              ),
              Text(
                isMandatory ? '$labelText *' : labelText,
                style: TextStyle(
                    color: Colors.blueGrey,
                    fontSize: size.width * 0.04,
                    fontWeight: FontWeight.w500),
              ),
              GestureDetector(
                onTap: () async {
                  await PackageRelated.openFile(
                      filePath: document, size: size);
                },
                child: Container(
                  // height: Get.height / 20,
                  margin: const EdgeInsets.all(10.0),
                  padding: const EdgeInsets.all(10.0),
                  decoration: BoxDecoration(
                    color: Colors.blue.shade50,
                    borderRadius:
                        const BorderRadius.all(Radius.circular(10.0)),
                  ),
                  child: document != null && document.toString().trim() != ''
                      ? Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: [
                            const Icon(
                              Icons.insert_drive_file_rounded,
                              color: Colors.black54,
                              size: 18.0,
                            ),
                            const SizedBox(
                              width: 5.0,
                            ),
                            Flexible(
                              child: Text(
                                OtherFunctions.getFileName(file: document),
                                maxLines: 2,
                                style: TextStyle(
                                  color: Colors.black,
                                  fontSize: size.width * 0.035,
                                ),
                              ),
                            ),
                          ],
                        )
                      : Text(
                          noDocument,
                          style: TextStyle(
                            color: Colors.grey.shade500,
                            fontSize: size.width * 0.035,
                          ),
                        ),
                ),
              ),
              GestureDetector(
                onTap: documentPickerOnTap,
                child: Container(
                  width: double.infinity,
                  decoration: BoxDecoration(
                      color: ColorFile.primaryColor,
                      border: Border.all(
                        color: ColorFile.primaryColor,
                      ),
                      borderRadius: const BorderRadius.only(
                          bottomLeft: Radius.circular(10),
                          bottomRight: Radius.circular(10))),
                  padding: const EdgeInsets.only(top: 8.0, bottom: 8.0),
                  child: const Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Text(
                        'Pick Document',
                        style: TextStyle(
                          fontWeight: FontWeight.bold,
                          color: Colors.white,
                        ),
                      ),
                      SizedBox(
                        width: 5.0,
                      ),
                      Icon(
                        Icons.folder,
                        color: Colors.white,
                        size: 20,
                      ),
                    ],
                  ),
                ),
              ),
            ],
          ),
        ),
        if (field.errorText != null)
          Padding(
            padding: const EdgeInsets.only(top: 10.0),
            child: Text(
              "${field.errorText}",
              style:
                  TextStyle(color: Colors.red, fontSize: size.width * 0.030),
            ),
          ),
        const SizedBox(
          height: 10.0,
        ),
      ],
    ),
  );
}