Add diploma/certificate upload to professional request form (required field)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
3e59a1cb4f
commit
9f2612ec70
@@ -72,6 +72,7 @@ class _FormBodyState extends State<_FormBody> {
|
|||||||
bool _loading = false;
|
bool _loading = false;
|
||||||
bool _cedulaError = false;
|
bool _cedulaError = false;
|
||||||
bool _cedulaNumError = false;
|
bool _cedulaNumError = false;
|
||||||
|
bool _certError = false;
|
||||||
bool _profError = false;
|
bool _profError = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -92,22 +93,25 @@ class _FormBodyState extends State<_FormBody> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _validate(String cedulaUrl) {
|
bool _validate(String cedulaUrl, String certUrl) {
|
||||||
final cErr = cedulaUrl.isEmpty;
|
final cErr = cedulaUrl.isEmpty;
|
||||||
final nErr = _cedulaNumCtrl.text.trim().isEmpty;
|
final nErr = _cedulaNumCtrl.text.trim().isEmpty;
|
||||||
|
final dErr = certUrl.isEmpty;
|
||||||
final pErr = _selectedProfession == null || _selectedProfession!.isEmpty;
|
final pErr = _selectedProfession == null || _selectedProfession!.isEmpty;
|
||||||
setState(() {
|
setState(() {
|
||||||
_cedulaError = cErr;
|
_cedulaError = cErr;
|
||||||
_cedulaNumError = nErr;
|
_cedulaNumError = nErr;
|
||||||
|
_certError = dErr;
|
||||||
_profError = pErr;
|
_profError = pErr;
|
||||||
});
|
});
|
||||||
return !cErr && !nErr && !pErr;
|
return !cErr && !nErr && !dErr && !pErr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _submit() async {
|
Future<void> _submit() async {
|
||||||
final fp = context.read<ProfessionalFormProvider>();
|
final fp = context.read<ProfessionalFormProvider>();
|
||||||
final cedulaUrl = fp.profesional?.identificationPicture ?? '';
|
final cedulaUrl = fp.profesional?.identificationPicture ?? '';
|
||||||
if (!_validate(cedulaUrl)) return;
|
final certUrl = fp.profesional?.certificatePicture ?? '';
|
||||||
|
if (!_validate(cedulaUrl, certUrl)) return;
|
||||||
|
|
||||||
setState(() => _loading = true);
|
setState(() => _loading = true);
|
||||||
try {
|
try {
|
||||||
@@ -199,6 +203,8 @@ class _FormBodyState extends State<_FormBody> {
|
|||||||
|
|
||||||
final cedulaUploaded =
|
final cedulaUploaded =
|
||||||
(fp.profesional?.identificationPicture ?? '').isNotEmpty;
|
(fp.profesional?.identificationPicture ?? '').isNotEmpty;
|
||||||
|
final certUploaded =
|
||||||
|
(fp.profesional?.certificatePicture ?? '').isNotEmpty;
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
@@ -293,7 +299,38 @@ class _FormBodyState extends State<_FormBody> {
|
|||||||
|
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
|
|
||||||
// ── 2. Profesión (obligatorio) ──────────────────────────────────────
|
// ── 2. Diploma / Certificado (obligatorio) ─────────────────────────
|
||||||
|
_SectionCard(
|
||||||
|
cardBg: cardBg,
|
||||||
|
border: border,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
_Label('Diploma o certificado profesional', Icons.school_outlined, required: true),
|
||||||
|
const SizedBox(height: 4),
|
||||||
|
Text(
|
||||||
|
'Sube el diploma, acta de grado o tarjeta profesional',
|
||||||
|
style: TextStyle(fontSize: 11, color: textSec),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
_UploadTile(
|
||||||
|
label: certUploaded ? 'Documento subido ✓' : 'Subir diploma / certificado (PDF o imagen)',
|
||||||
|
uploaded: certUploaded,
|
||||||
|
onTap: () => _pickAndUpload((b) => fp.uploadPdfCertificate(b, user.id)),
|
||||||
|
),
|
||||||
|
if (_certError)
|
||||||
|
const Padding(
|
||||||
|
padding: EdgeInsets.only(top: 8),
|
||||||
|
child: Text('Debes subir el diploma o certificado',
|
||||||
|
style: TextStyle(color: Colors.redAccent, fontSize: 12)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
|
||||||
|
// ── 4. Profesión (obligatorio) ──────────────────────────────────────
|
||||||
_SectionCard(
|
_SectionCard(
|
||||||
cardBg: cardBg,
|
cardBg: cardBg,
|
||||||
border: border,
|
border: border,
|
||||||
|
|||||||
Reference in New Issue
Block a user