diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/blocs/certificate_upload/certificate_upload_cubit.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/blocs/certificate_upload/certificate_upload_cubit.dart index 4cb2b2e4..a70bc69e 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/blocs/certificate_upload/certificate_upload_cubit.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/blocs/certificate_upload/certificate_upload_cubit.dart @@ -19,6 +19,10 @@ class CertificateUploadCubit extends Cubit emit(state.copyWith(isAttested: value)); } + void setSelectedFilePath(String? filePath) { + emit(state.copyWith(selectedFilePath: filePath)); + } + Future deleteCertificate(ComplianceType type) async { emit(state.copyWith(status: CertificateUploadStatus.uploading)); await handleError( diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/blocs/certificate_upload/certificate_upload_state.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/blocs/certificate_upload/certificate_upload_state.dart index 31ea5991..2998a940 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/blocs/certificate_upload/certificate_upload_state.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/blocs/certificate_upload/certificate_upload_state.dart @@ -7,24 +7,28 @@ class CertificateUploadState extends Equatable { const CertificateUploadState({ this.status = CertificateUploadStatus.initial, this.isAttested = false, + this.selectedFilePath, this.updatedCertificate, this.errorMessage, }); final CertificateUploadStatus status; final bool isAttested; + final String? selectedFilePath; final StaffCertificate? updatedCertificate; final String? errorMessage; CertificateUploadState copyWith({ CertificateUploadStatus? status, bool? isAttested, + String? selectedFilePath, StaffCertificate? updatedCertificate, String? errorMessage, }) { return CertificateUploadState( status: status ?? this.status, isAttested: isAttested ?? this.isAttested, + selectedFilePath: selectedFilePath ?? this.selectedFilePath, updatedCertificate: updatedCertificate ?? this.updatedCertificate, errorMessage: errorMessage ?? this.errorMessage, ); @@ -34,6 +38,7 @@ class CertificateUploadState extends Equatable { List get props => [ status, isAttested, + selectedFilePath, updatedCertificate, errorMessage, ]; diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/pages/certificate_upload_page.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/pages/certificate_upload_page.dart index d8dd6456..287852ad 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/pages/certificate_upload_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/pages/certificate_upload_page.dart @@ -25,7 +25,6 @@ class CertificateUploadPage extends StatefulWidget { } class _CertificateUploadPageState extends State { - String? _selectedFilePath; DateTime? _selectedExpiryDate; final TextEditingController _issuerController = TextEditingController(); final TextEditingController _numberController = TextEditingController(); @@ -37,16 +36,19 @@ class _CertificateUploadPageState extends State { bool get _isNewCertificate => widget.certificate == null; + late CertificateUploadCubit _cubit; + @override void initState() { super.initState(); + _cubit = Modular.get(); + if (widget.certificate != null) { _selectedExpiryDate = widget.certificate!.expiryDate; _issuerController.text = widget.certificate!.issuer ?? ''; _numberController.text = widget.certificate!.certificateNumber ?? ''; _nameController.text = widget.certificate!.name; _selectedType = widget.certificate!.certificationType; - _selectedFilePath = widget.certificate?.certificateUrl; } else { _selectedType = ComplianceType.other; } @@ -82,9 +84,7 @@ class _CertificateUploadPageState extends State { ); return; } - setState(() { - _selectedFilePath = path; - }); + _cubit.setSelectedFilePath(path); } } @@ -148,7 +148,9 @@ class _CertificateUploadPageState extends State { @override Widget build(BuildContext context) { return BlocProvider.value( - value: Modular.get(), + value: _cubit..setSelectedFilePath( + widget.certificate?.certificateUrl, + ), child: BlocConsumer( listener: (BuildContext context, CertificateUploadState state) { if (state.status == CertificateUploadStatus.success) { @@ -209,7 +211,7 @@ class _CertificateUploadPageState extends State { ), const SizedBox(height: UiConstants.space2), FileSelector( - selectedFilePath: _selectedFilePath, + selectedFilePath: state.selectedFilePath, onTap: _pickFile, ), ], @@ -220,7 +222,7 @@ class _CertificateUploadPageState extends State { padding: const EdgeInsets.all(UiConstants.space5), child: CertificateUploadActions( isAttested: state.isAttested, - isFormValid: _selectedFilePath != null && + isFormValid: state.selectedFilePath != null && state.isAttested && _nameController.text.isNotEmpty, isUploading: state.status == CertificateUploadStatus.uploading, @@ -228,7 +230,7 @@ class _CertificateUploadPageState extends State { onUploadPressed: () { final String? err = _validatePdfFile( context, - _selectedFilePath!, + state.selectedFilePath!, ); if (err != null) { UiSnackbar.show( @@ -244,7 +246,7 @@ class _CertificateUploadPageState extends State { UploadCertificateParams( certificationType: _selectedType!, name: _nameController.text, - filePath: _selectedFilePath!, + filePath: state.selectedFilePath!, expiryDate: _selectedExpiryDate, issuer: _issuerController.text, certificateNumber: _numberController.text,