diff --git a/lib/ui/views/request_professional_view.dart b/lib/ui/views/request_professional_view.dart index bba0293..6a207b4 100644 --- a/lib/ui/views/request_professional_view.dart +++ b/lib/ui/views/request_professional_view.dart @@ -72,6 +72,7 @@ class _FormBodyState extends State<_FormBody> { bool _loading = false; bool _cedulaError = false; bool _cedulaNumError = false; + bool _certError = false; bool _profError = false; @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 nErr = _cedulaNumCtrl.text.trim().isEmpty; + final dErr = certUrl.isEmpty; final pErr = _selectedProfession == null || _selectedProfession!.isEmpty; setState(() { _cedulaError = cErr; _cedulaNumError = nErr; + _certError = dErr; _profError = pErr; }); - return !cErr && !nErr && !pErr; + return !cErr && !nErr && !dErr && !pErr; } Future _submit() async { final fp = context.read(); final cedulaUrl = fp.profesional?.identificationPicture ?? ''; - if (!_validate(cedulaUrl)) return; + final certUrl = fp.profesional?.certificatePicture ?? ''; + if (!_validate(cedulaUrl, certUrl)) return; setState(() => _loading = true); try { @@ -199,6 +203,8 @@ class _FormBodyState extends State<_FormBody> { final cedulaUploaded = (fp.profesional?.identificationPicture ?? '').isNotEmpty; + final certUploaded = + (fp.profesional?.certificatePicture ?? '').isNotEmpty; return Column( crossAxisAlignment: CrossAxisAlignment.stretch, @@ -293,7 +299,38 @@ class _FormBodyState extends State<_FormBody> { 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( cardBg: cardBg, border: border,