Merge pull request #557 from Oloodi/267-p0-comp-04-documents-screen

Fix small UI issue
This commit is contained in:
Achintha Isuru
2026-02-27 02:01:34 -05:00
committed by GitHub
7 changed files with 53 additions and 20 deletions

View File

@@ -279,4 +279,10 @@ class UiIcons {
/// Gallery icon for gallery /// Gallery icon for gallery
static const IconData gallery = _IconLib.galleryVertical; static const IconData gallery = _IconLib.galleryVertical;
/// Certificate icon
static const IconData certificate = _IconLib.fileCheck;
/// Circle dollar icon
static const IconData circleDollar = _IconLib.circleDollarSign;
} }

View File

@@ -21,7 +21,9 @@ class ComplianceSection extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final TranslationsStaffProfileEn i18n = Translations.of(context).staff.profile; final TranslationsStaffProfileEn i18n = Translations.of(
context,
).staff.profile;
return BlocBuilder<ProfileCubit, ProfileState>( return BlocBuilder<ProfileCubit, ProfileState>(
builder: (BuildContext context, ProfileState state) { builder: (BuildContext context, ProfileState state) {
@@ -33,11 +35,21 @@ class ComplianceSection extends StatelessWidget {
crossAxisCount: 3, crossAxisCount: 3,
children: <Widget>[ children: <Widget>[
ProfileMenuItem( ProfileMenuItem(
icon: UiIcons.file, icon: UiIcons.circleDollar,
label: i18n.menu_items.tax_forms, label: i18n.menu_items.tax_forms,
completed: state.taxFormsComplete, completed: state.taxFormsComplete,
onTap: () => Modular.to.toTaxForms(), onTap: () => Modular.to.toTaxForms(),
), ),
ProfileMenuItem(
icon: UiIcons.file,
label: i18n.menu_items.documents,
onTap: () => Modular.to.toDocuments(),
),
ProfileMenuItem(
icon: UiIcons.certificate,
label: i18n.menu_items.certificates,
onTap: () => Modular.to.toCertificates(),
),
], ],
), ),
], ],

View File

@@ -56,11 +56,6 @@ class OnboardingSection extends StatelessWidget {
label: i18n.menu_items.attire, label: i18n.menu_items.attire,
onTap: () => Modular.to.toAttire(), onTap: () => Modular.to.toAttire(),
), ),
ProfileMenuItem(
icon: UiIcons.file,
label: i18n.menu_items.documents,
onTap: () => Modular.to.toDocuments(),
),
], ],
), ),
], ],

View File

@@ -15,6 +15,9 @@ import 'presentation/pages/certificate_upload_page.dart';
import 'presentation/pages/certificates_page.dart'; import 'presentation/pages/certificates_page.dart';
class StaffCertificatesModule extends Module { class StaffCertificatesModule extends Module {
@override
List<Module> get imports => <Module>[CoreModule()];
@override @override
void binds(Injector i) { void binds(Injector i) {
i.addLazySingleton<CertificatesRepository>(CertificatesRepositoryImpl.new); i.addLazySingleton<CertificatesRepository>(CertificatesRepositoryImpl.new);

View File

@@ -11,6 +11,9 @@ import 'presentation/pages/documents_page.dart';
import 'presentation/pages/document_upload_page.dart'; import 'presentation/pages/document_upload_page.dart';
class StaffDocumentsModule extends Module { class StaffDocumentsModule extends Module {
@override
List<Module> get imports => <Module>[CoreModule()];
@override @override
void binds(Injector i) { void binds(Injector i) {
i.addLazySingleton<DocumentsRepository>( i.addLazySingleton<DocumentsRepository>(

View File

@@ -14,6 +14,9 @@ import 'presentation/pages/attire_capture_page.dart';
import 'presentation/pages/attire_page.dart'; import 'presentation/pages/attire_page.dart';
class StaffAttireModule extends Module { class StaffAttireModule extends Module {
@override
List<Module> get imports => <Module>[CoreModule()];
@override @override
void binds(Injector i) { void binds(Injector i) {
/// third party services /// third party services
@@ -25,7 +28,13 @@ class StaffAttireModule extends Module {
); );
// Repository // Repository
i.addLazySingleton<AttireRepository>(AttireRepositoryImpl.new); i.addLazySingleton<AttireRepository>(
() => AttireRepositoryImpl(
uploadService: i.get<FileUploadService>(),
signedUrlService: i.get<SignedUrlService>(),
verificationService: i.get<VerificationService>(),
),
);
// Use Cases // Use Cases
i.addLazySingleton(GetAttireOptionsUseCase.new); i.addLazySingleton(GetAttireOptionsUseCase.new);

View File

@@ -1,5 +1,4 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart'; import 'package:krow_core/core.dart';
import 'package:krow_data_connect/krow_data_connect.dart' import 'package:krow_data_connect/krow_data_connect.dart'
hide AttireVerificationStatus; hide AttireVerificationStatus;
@@ -12,12 +11,22 @@ import '../../domain/repositories/attire_repository.dart';
/// Delegates data access to [StaffConnectorRepository]. /// Delegates data access to [StaffConnectorRepository].
class AttireRepositoryImpl implements AttireRepository { class AttireRepositoryImpl implements AttireRepository {
/// Creates an [AttireRepositoryImpl]. /// Creates an [AttireRepositoryImpl].
AttireRepositoryImpl({StaffConnectorRepository? connector}) AttireRepositoryImpl({
: _connector = required FileUploadService uploadService,
connector ?? DataConnectService.instance.getStaffRepository(); required SignedUrlService signedUrlService,
required VerificationService verificationService,
StaffConnectorRepository? connector,
}) : _connector =
connector ?? DataConnectService.instance.getStaffRepository(),
_uploadService = uploadService,
_signedUrlService = signedUrlService,
_verificationService = verificationService;
/// The Staff Connector repository. /// The Staff Connector repository.
final StaffConnectorRepository _connector; final StaffConnectorRepository _connector;
final FileUploadService _uploadService;
final SignedUrlService _signedUrlService;
final VerificationService _verificationService;
@override @override
Future<List<AttireItem>> getAttireOptions() async { Future<List<AttireItem>> getAttireOptions() async {
@@ -37,8 +46,7 @@ class AttireRepositoryImpl implements AttireRepository {
@override @override
Future<AttireItem> uploadPhoto(String itemId, String filePath) async { Future<AttireItem> uploadPhoto(String itemId, String filePath) async {
// 1. Upload file to Core API // 1. Upload file to Core API
final FileUploadService uploadService = Modular.get<FileUploadService>(); final FileUploadResponse uploadRes = await _uploadService.uploadFile(
final FileUploadResponse uploadRes = await uploadService.uploadFile(
filePath: filePath, filePath: filePath,
fileName: filePath.split('/').last, fileName: filePath.split('/').last,
); );
@@ -46,14 +54,11 @@ class AttireRepositoryImpl implements AttireRepository {
final String fileUri = uploadRes.fileUri; final String fileUri = uploadRes.fileUri;
// 2. Create signed URL for the uploaded file // 2. Create signed URL for the uploaded file
final SignedUrlService signedUrlService = Modular.get<SignedUrlService>(); final SignedUrlResponse signedUrlRes = await _signedUrlService
final SignedUrlResponse signedUrlRes = await signedUrlService
.createSignedUrl(fileUri: fileUri); .createSignedUrl(fileUri: fileUri);
final String photoUrl = signedUrlRes.signedUrl; final String photoUrl = signedUrlRes.signedUrl;
// 3. Initiate verification job // 3. Initiate verification job
final VerificationService verificationService =
Modular.get<VerificationService>();
final Staff staff = await _connector.getStaffProfile(); final Staff staff = await _connector.getStaffProfile();
// Get item details for verification rules // Get item details for verification rules
@@ -64,7 +69,7 @@ class AttireRepositoryImpl implements AttireRepository {
final String dressCode = final String dressCode =
'${targetItem.description ?? ''} ${targetItem.label}'.trim(); '${targetItem.description ?? ''} ${targetItem.label}'.trim();
final VerificationResponse verifyRes = await verificationService final VerificationResponse verifyRes = await _verificationService
.createVerification( .createVerification(
type: 'attire', type: 'attire',
subjectType: 'worker', subjectType: 'worker',
@@ -81,7 +86,7 @@ class AttireRepositoryImpl implements AttireRepository {
bool isFinished = false; bool isFinished = false;
while (!isFinished && attempts < 5) { while (!isFinished && attempts < 5) {
await Future<void>.delayed(const Duration(seconds: 2)); await Future<void>.delayed(const Duration(seconds: 2));
final VerificationResponse statusRes = await verificationService final VerificationResponse statusRes = await _verificationService
.getStatus(verificationId); .getStatus(verificationId);
currentStatus = statusRes.status; currentStatus = statusRes.status;
if (currentStatus != VerificationStatus.pending && if (currentStatus != VerificationStatus.pending &&