From 3e212220c75a66c5c585d0e474c8c9456202685c Mon Sep 17 00:00:00 2001 From: Suriya Date: Wed, 11 Feb 2026 10:36:08 +0530 Subject: [PATCH] feat: complete centralized error handling system with documentation --- apps/mobile/analysis.txt | Bin 310508 -> 0 bytes apps/mobile/analysis_2.txt | Bin 274588 -> 0 bytes apps/mobile/analysis_3.txt | Bin 269630 -> 0 bytes apps/mobile/analysis_utf8.txt | 832 ------------------ apps/mobile/analysis_utf8_2.txt | 735 ---------------- apps/mobile/analysis_utf8_3.txt | 695 --------------- .../lib/src/l10n/en.i18n.json | 5 +- .../lib/src/l10n/es.i18n.json | 3 +- .../lib/src/mixins/data_error_handler.dart | 30 +- .../src/presentation/pages/billing_page.dart | 9 +- .../auth_repository_impl.dart | 53 +- .../pages/phone_verification_page.dart | 13 +- .../get_started_background.dart | 57 +- .../otp_verification/otp_input_field.dart | 6 +- .../phone_input/phone_input_form_field.dart | 6 +- .../availability_repository_impl.dart | 259 +++--- .../presentation/pages/availability_page.dart | 29 +- .../src/presentation/pages/clock_in_page.dart | 5 +- .../presentation/pages/worker_home_page.dart | 1 + .../payments_repository_impl.dart | 105 +-- .../src/presentation/pages/payments_page.dart | 26 +- .../repositories/profile_repository_impl.dart | 62 +- .../pages/staff_profile_page.dart | 24 +- .../language_selector_bottom_sheet.dart | 48 +- .../certificates_repository_impl.dart | 22 +- .../presentation/pages/certificates_page.dart | 14 +- .../documents_repository_impl.dart | 31 +- .../presentation/pages/documents_page.dart | 14 +- .../tax_forms_repository_impl.dart | 238 +++-- .../presentation/pages/tax_forms_page.dart | 11 +- .../bank_account_repository_impl.dart | 85 +- .../presentation/pages/bank_account_page.dart | 24 +- .../time_card_repository_impl.dart | 85 +- .../presentation/pages/time_card_page.dart | 26 +- .../emergency_contact_repository_impl.dart | 102 ++- .../pages/emergency_contact_screen.dart | 13 +- .../experience_repository_impl.dart | 45 +- .../presentation/pages/experience_page.dart | 11 +- .../personal_info_repository_impl.dart | 89 +- .../pages/personal_info_page.dart | 10 +- .../src/presentation/pages/shifts_page.dart | 47 +- .../widgets/staff_main_bottom_bar.dart | 1 + docs/ERROR_HANDLING_ARCHITECTURE.md | 131 +++ 43 files changed, 1144 insertions(+), 2858 deletions(-) delete mode 100644 apps/mobile/analysis.txt delete mode 100644 apps/mobile/analysis_2.txt delete mode 100644 apps/mobile/analysis_3.txt delete mode 100644 apps/mobile/analysis_utf8.txt delete mode 100644 apps/mobile/analysis_utf8_2.txt delete mode 100644 apps/mobile/analysis_utf8_3.txt create mode 100644 docs/ERROR_HANDLING_ARCHITECTURE.md diff --git a/apps/mobile/analysis.txt b/apps/mobile/analysis.txt deleted file mode 100644 index fe23f674e6e0cfa2a07af5f80f8befde3cfb9b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310508 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 DBN6@c diff --git a/apps/mobile/analysis_2.txt b/apps/mobile/analysis_2.txt deleted file mode 100644 index 986bb3d61429c1430ddcef2c25d00b367cd4fed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274588 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 Rd6cJq-A;_*=8#eU`TyNi') - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\mappers\tax_form_mapper.dart:47:23 - unrelated_type_equality_checks - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:194:41 - curly_braces_in_flow_control_structures - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:195:47 - curly_braces_in_flow_control_structures - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:196:44 - curly_braces_in_flow_control_structures - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\get_tax_forms_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\save_i9_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\save_w4_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\submit_i9_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\submit_w4_form_usecase.dart:7:3 - sort_constructors_first - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:2:8 - uri_does_not_exist - info - The imported package 'uuid' isn't a dependency of the importing package - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:4:8 - depend_on_referenced_packages - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:9:51 - mixin_of_non_class - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:13:3 - sort_constructors_first - error - The method 'handleError' isn't defined for the type 'FormI9Cubit' - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:99:11 - undefined_method -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:102:47 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_state.dart:38:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_state.dart:117:30 - always_specify_types - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_cubit.dart:2:8 - uri_does_not_exist - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_cubit.dart:8:10 - mixin_of_non_class - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_cubit.dart:11:3 - sort_constructors_first - error - The method 'handleError' isn't defined for the type 'TaxFormsCubit' - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_cubit.dart:15:11 - undefined_method - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_state.dart:11:9 - sort_constructors_first - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:2:8 - uri_does_not_exist - info - The imported package 'uuid' isn't a dependency of the importing package - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:4:8 - depend_on_referenced_packages - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:9:51 - mixin_of_non_class - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:13:3 - sort_constructors_first - error - The method 'handleError' isn't defined for the type 'FormW4Cubit' - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:92:11 - undefined_method -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:95:47 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_state.dart:32:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_state.dart:92:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:12:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:212:81 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:232:50 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:249:77 - deprecated_member_use - info - 'value' is deprecated and shouldn't be used. Use initialValue instead. This will set the initial value for the form field. This feature was deprecated after v3.33.0-1.0.pre - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:465:21 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:12:9 - sort_constructors_first -warning - The value of the field '_usStates' isn't used - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:27:22 - unused_field - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:258:81 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:278:50 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:295:77 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:446:18 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:40:47 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:148:11 - always_specify_types - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:150:53 - unawaited_futures -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:153:11 - always_specify_types - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:155:53 - unawaited_futures - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:174:41 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\compliance\tax_forms\lib\staff_tax_forms.dart:1:9 - unnecessary_library_name - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\arguments\add_bank_account_params.dart:9:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\arguments\add_bank_account_params.dart:12:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\usecases\add_bank_account_usecase.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\usecases\get_bank_accounts_usecase.dart:9:3 - sort_constructors_first - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:2:8 - uri_does_not_exist - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:10:10 - mixin_of_non_class - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:14:3 - sort_constructors_first - error - The method 'handleError' isn't defined for the type 'BankAccountCubit' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:23:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'BankAccountCubit' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:73:11 - undefined_method - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:12:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:14:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:34:30 - always_specify_types -warning - Unused import: 'package:krow_core/core.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:11:8 - unused_import - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:146:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:202:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:242:37 - deprecated_member_use -warning - Unused import: 'package:flutter_modular/flutter_modular.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:2:8 - unused_import -warning - Unused import: '../blocs/bank_account_cubit.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:4:8 - unused_import - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:11:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:125:34 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\finances\staff_bank_account\lib\staff_bank_account.dart:1:9 - unnecessary_library_name - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:1:8 - depend_on_referenced_packages - info - The imported package 'firebase_data_connect' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:2:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:17:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\arguments\get_time_cards_arguments.dart:8:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\arguments\get_time_cards_arguments.dart:11:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\usecases\get_time_cards_usecase.dart:10:3 - sort_constructors_first - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_bloc.dart:3:8 - uri_does_not_exist - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_bloc.dart:13:10 - mixin_of_non_class - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_bloc.dart:16:3 - sort_constructors_first - error - The method 'handleError' isn't defined for the type 'TimeCardBloc' - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_bloc.dart:27:11 - undefined_method -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:6:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:14:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:19:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:22:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:6:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:17:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:25:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:29:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:31:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:30:12 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:53:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:53:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:65:29 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\month_selector.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\month_selector.dart:29:19 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:17:17 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:30:27 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:42:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:19:17 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:45:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:62:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:64:23 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:15:5 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:22:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:27:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:32:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:37:41 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:43:5 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:54:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:58:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:61:27 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:98:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:116:25 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:139:7 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:141:9 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:155:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:161:17 - always_specify_types - info - Library names are not necessary - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:1:9 - unnecessary_library_name - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:3:8 - depend_on_referenced_packages -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:45:15 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\data\repositories_impl\attire_repository_impl.dart:15:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\arguments\save_attire_arguments.dart:12:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\arguments\upload_attire_photo_arguments.dart:12:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\get_attire_options_usecase.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\save_attire_usecase.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\upload_attire_photo_usecase.dart:10:3 - sort_constructors_first - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:2:8 - uri_does_not_exist - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:13:10 - mixin_of_non_class - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:18:3 - sort_constructors_first - error - The method 'handleError' isn't defined for the type 'AttireCubit' - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:28:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'AttireCubit' - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:89:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'AttireCubit' - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:141:11 - undefined_method - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_state.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attestation_checkbox.dart:9:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_bottom_bar.dart:12:9 - sort_constructors_first - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:3:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:15:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:56:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:156:46 - deprecated_member_use - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_info_card.dart:3:8 - depend_on_referenced_packages - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_info_card.dart:14:33 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\onboarding\attire\lib\staff_attire.dart:1:9 - unnecessary_library_name - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\onboarding\emergency_contact\lib\src\presentation\blocs\emergency_contact_bloc.dart:2:8 - uri_does_not_exist - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\onboarding\emergency_contact\lib\src\presentation\blocs\emergency_contact_bloc.dart:17:10 - mixin_of_non_class - error - The method 'handleError' isn't defined for the type 'EmergencyContactBloc' - packages\features\staff\profile_sections\onboarding\emergency_contact\lib\src\presentation\blocs\emergency_contact_bloc.dart:39:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'EmergencyContactBloc' - packages\features\staff\profile_sections\onboarding\emergency_contact\lib\src\presentation\blocs\emergency_contact_bloc.dart:91:11 - undefined_method - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\emergency_contact\lib\src\presentation\widgets\emergency_contact_info_banner.dart:12:32 - deprecated_member_use - info - Constructors in '@immutable' classes should be declared as 'const' - packages\features\staff\profile_sections\onboarding\experience\lib\src\domain\arguments\save_experience_arguments.dart:7:3 - prefer_const_constructors_in_immutables - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\blocs\experience_bloc.dart:3:8 - uri_does_not_exist - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\blocs\experience_bloc.dart:97:10 - mixin_of_non_class - error - The method 'handleError' isn't defined for the type 'ExperienceBloc' - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\blocs\experience_bloc.dart:126:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'ExperienceBloc' - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\blocs\experience_bloc.dart:191:11 - undefined_method -warning - The declaration '_buildCustomSkillsList' isn't referenced - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\pages\experience_page.dart:140:10 - unused_element - info - Library names are not necessary - packages\features\staff\profile_sections\onboarding\experience\lib\staff_profile_experience.dart:1:9 - unnecessary_library_name - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:3:8 - uri_does_not_exist - error - Classes can only mix in mixins and classes - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:17:10 - mixin_of_non_class - error - The method 'handleError' isn't defined for the type 'PersonalInfoBloc' - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:44:11 - undefined_method -warning - Missing type annotation - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:82:48 - always_specify_types - error - The method 'handleError' isn't defined for the type 'PersonalInfoBloc' - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:95:11 - undefined_method - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\widgets\profile_photo_widget.dart:44:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\widgets\profile_photo_widget.dart:74:53 - deprecated_member_use - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\data\repositories_impl\shifts_repository_impl.dart:4:8 - depend_on_referenced_packages - info - The imported package 'firebase_data_connect' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\data\repositories_impl\shifts_repository_impl.dart:5:8 - depend_on_referenced_packages - info - The imported package 'bloc' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:1:8 - depend_on_referenced_packages - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:2:8 - uri_does_not_exist - error - Classes can only mix in mixins and classes - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:11:10 - mixin_of_non_class - error - The method 'handleError' isn't defined for the type 'ShiftDetailsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:31:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'ShiftDetailsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:51:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'ShiftDetailsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:71:11 - undefined_method - info - The imported package 'bloc' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:1:8 - depend_on_referenced_packages - error - Target of URI doesn't exist: 'package:krow_core/krow_core.dart' - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:3:8 - uri_does_not_exist - info - The imported package 'meta' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:5:8 - depend_on_referenced_packages - error - Classes can only mix in mixins and classes - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:19:10 - mixin_of_non_class - error - The method 'handleError' isn't defined for the type 'ShiftsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:49:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'ShiftsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:85:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'ShiftsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:114:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'ShiftsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:162:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'ShiftsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:202:11 - undefined_method - error - The method 'handleError' isn't defined for the type 'ShiftsBloc' - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:248:13 - undefined_method - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:32:5 - avoid_print - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:40:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:44:7 - avoid_print - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:128:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:183:57 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:208:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:209:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:216:53 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:74:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:100:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:101:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:108:51 - deprecated_member_use - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:4:8 - depend_on_referenced_packages - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:316:54 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:507:47 - deprecated_member_use - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\staff\staff_main\lib\src\presentation\blocs\staff_main_cubit.dart:2:8 - depend_on_referenced_packages - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\staff\staff_main\lib\src\staff_main_module.dart:3:8 - depend_on_referenced_packages - diff --git a/apps/mobile/analysis_utf8_2.txt b/apps/mobile/analysis_utf8_2.txt deleted file mode 100644 index e65ca897..00000000 --- a/apps/mobile/analysis_utf8_2.txt +++ /dev/null @@ -1,735 +0,0 @@ -Resolving dependencies... -Downloading packages... - _fe_analyzer_shared 91.0.0 (94.0.0 available) - analyzer 8.4.1 (10.0.2 available) - archive 3.6.1 (4.0.7 available) - bloc 8.1.4 (9.2.0 available) - bloc_test 9.1.7 (10.0.0 available) - build_runner 2.10.5 (2.11.0 available) - characters 1.4.0 (1.4.1 available) - code_assets 0.19.10 (1.0.0 available) - dart_style 3.1.3 (3.1.5 available) - fl_chart 0.66.2 (1.1.1 available) - flutter_bloc 8.1.6 (9.1.1 available) - geolocator 10.1.1 (14.0.2 available) - geolocator_android 4.6.2 (5.0.2 available) - geolocator_web 2.2.1 (4.1.3 available) - get_it 7.7.0 (9.2.0 available) - google_fonts 7.0.2 (8.0.1 available) - googleapis_auth 1.6.0 (2.0.0 available) - grpc 3.2.4 (5.1.0 available) - hooks 0.20.5 (1.0.1 available) - image 4.3.0 (4.7.2 available) - json_annotation 4.9.0 (4.10.0 available) - lints 6.0.0 (6.1.0 available) - matcher 0.12.17 (0.12.18 available) - material_color_utilities 0.11.1 (0.13.0 available) - melos 7.3.0 (7.4.0 available) - meta 1.17.0 (1.18.1 available) - native_toolchain_c 0.17.2 (0.17.4 available) - objective_c 9.2.2 (9.3.0 available) - permission_handler 11.4.0 (12.0.1 available) - permission_handler_android 12.1.0 (13.0.1 available) - protobuf 3.1.0 (6.0.0 available) - shared_preferences_android 2.4.18 (2.4.20 available) - slang 4.12.0 (4.12.1 available) - slang_build_runner 4.12.0 (4.12.1 available) - slang_flutter 4.12.0 (4.12.1 available) - source_span 1.10.1 (1.10.2 available) - test 1.26.3 (1.29.0 available) - test_api 0.7.7 (0.7.9 available) - test_core 0.6.12 (0.6.15 available) - url_launcher_ios 6.3.6 (6.4.0 available) -Got dependencies! -40 packages have newer versions incompatible with dependency constraints. -Try `flutter pub outdated` for more information. -Analyzing mobile... - - info - Library names are not necessary - packages\core\lib\core.dart:1:9 - unnecessary_library_name - info - The imported package 'flutter_bloc' isn't a dependency of the importing package - packages\core\lib\src\presentation\mixins\bloc_error_handler.dart:2:8 - depend_on_referenced_packages - info - The imported package 'krow_domain' isn't a dependency of the importing package - packages\core\lib\src\presentation\mixins\bloc_error_handler.dart:3:8 - depend_on_referenced_packages - info - The imported package 'flutter_bloc' isn't a dependency of the importing package - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:2:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:31:3 - sort_constructors_first -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:37:17 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:46:16 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:57:17 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:57:32 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:68:16 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:98:16 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:107:21 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:107:32 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:99:47 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:128:51 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:244:55 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:246:64 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:249:49 - deprecated_member_use - info - Dangling library doc comment - packages\core\lib\src\routing\routing.dart:1:1 - dangling_library_doc_comments - info - The imported package 'krow_domain' isn't a dependency of the importing package - packages\core\lib\src\routing\staff\navigator.dart:2:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\bloc\locale_event.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\data\datasources\locale_local_data_source.dart:18:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\domain\usecases\get_default_locale_use_case.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\domain\usecases\get_locale_use_case.dart:13:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\domain\usecases\get_supported_locales_use_case.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\domain\usecases\set_locale_use_case.dart:13:3 - sort_constructors_first - info - The imported package 'firebase_core' isn't a dependency of the importing package - packages\data_connect\lib\src\mixins\data_error_handler.dart:4:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\client_session_store.dart:11:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\client_session_store.dart:26:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\client_session_store.dart:48:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\staff_session_store.dart:8:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\staff_session_store.dart:30:3 - sort_constructors_first - info - Statements in an if should be enclosed in a block - packages\design_system\lib\src\ui_theme.dart:85:19 - curly_braces_in_flow_control_structures -warning - Missing type annotation - packages\design_system\lib\src\ui_theme.dart:258:27 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_app_bar.dart:39:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:43:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:61:3 - sort_constructors_first - info - Constructors in '@immutable' classes should be declared as 'const' - packages\design_system\lib\src\widgets\ui_button.dart:61:3 - prefer_const_constructors_in_immutables - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:79:3 - sort_constructors_first - info - Constructors in '@immutable' classes should be declared as 'const' - packages\design_system\lib\src\widgets\ui_button.dart:79:3 - prefer_const_constructors_in_immutables - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:97:3 - sort_constructors_first - info - Constructors in '@immutable' classes should be declared as 'const' - packages\design_system\lib\src\widgets\ui_button.dart:97:3 - prefer_const_constructors_in_immutables - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:115:3 - sort_constructors_first - info - Constructors in '@immutable' classes should be declared as 'const' - packages\design_system\lib\src\widgets\ui_button.dart:115:3 - prefer_const_constructors_in_immutables - info - Type could be non-nullable - packages\design_system\lib\src\widgets\ui_button.dart:135:24 - unnecessary_nullable_for_final_variable_declarations - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_chip.dart:57:9 - sort_constructors_first -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_error_snackbar.dart:38:21 - always_specify_types -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_error_snackbar.dart:45:27 - always_specify_types -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_error_snackbar.dart:50:45 - always_specify_types -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_error_snackbar.dart:82:5 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_icon_button.dart:30:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_icon_button.dart:42:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_icon_button.dart:53:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_step_indicator.dart:18:9 - sort_constructors_first -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_step_indicator.dart:38:19 - always_specify_types -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_success_snackbar.dart:30:21 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\design_system\lib\src\widgets\ui_success_snackbar.dart:31:13 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_text_field.dart:59:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:5:68 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:6:16 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:11:18 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:16:16 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:25:5 - always_specify_types -warning - Unused import: '../../entities/shifts/shift.dart' - packages\domain\lib\src\adapters\clock_in\clock_in_adapter.dart:1:8 - unused_import -warning - Missing type annotation - packages\domain\lib\src\adapters\profile\bank_account_adapter.dart:34:10 - always_specify_types - info - Angle brackets will be interpreted as HTML - packages\domain\lib\src\adapters\profile\experience_adapter.dart:3:62 - unintended_html_in_doc_comment -warning - Unnecessary cast - packages\domain\lib\src\adapters\profile\tax_form_adapter.dart:21:53 - unnecessary_cast -warning - Missing type annotation - packages\domain\lib\src\adapters\profile\tax_form_adapter.dart:21:65 - always_specify_types - info - The imported package 'intl' isn't a dependency of the importing package - packages\domain\lib\src\adapters\shifts\shift_adapter.dart:1:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\availability\availability_slot.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\availability\availability_slot.dart:32:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\availability\day_availability.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\availability\day_availability.dart:14:18 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\entities\availability\day_availability.dart:30:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\clock_in\attendance_status.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\clock_in\attendance_status.dart:20:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\financial\payment_summary.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\financial\payment_summary.dart:18:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\financial\time_card.dart:50:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\financial\time_card.dart:65:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\attire_item.dart:23:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\experience_skill.dart:21:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\profile\experience_skill.dart:25:49 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\industry.dart:12:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\profile\industry.dart:16:42 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\staff_document.dart:38:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\profile\staff_document.dart:50:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\tax_form.dart:19:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\profile\tax_form.dart:26:21 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\entities\profile\tax_form.dart:32:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\shifts\shift.dart:33:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\shifts\shift.dart:65:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\shifts\shift.dart:102:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\shifts\shift.dart:105:30 - always_specify_types - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:35:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:44:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:53:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:62:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:71:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:80:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:89:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:98:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:107:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:116:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:134:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:143:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:152:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:170:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:179:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:188:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:197:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:206:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:224:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:233:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:242:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:260:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:269:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:278:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:291:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:300:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:309:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:318:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:327:9 - use_super_parameters -warning - The name GoogleOnlyAccountException is shown, but isn't used - packages\features\client\authentication\lib\src\data\repositories_impl\auth_repository_impl.dart:16:9 - unused_shown_name -warning - The value of the local variable 'newUserData' isn't used - packages\features\client\authentication\lib\src\data\repositories_impl\auth_repository_impl.dart:266:35 - unused_local_variable - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:137:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:152:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:200:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:210:47 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:241:35 - deprecated_member_use -warning - Missing type annotation - packages\features\client\authentication\lib\src\presentation\pages\client_sign_up_page.dart:44:12 - always_specify_types -warning - The value of the local variable 'currentBill' isn't used - packages\features\client\billing\lib\src\presentation\blocs\billing_bloc.dart:57:22 - unused_local_variable - error - Expected a method, getter, setter or operator declaration - packages\features\client\billing\lib\src\presentation\blocs\billing_bloc.dart:172:1 - expected_executable - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:76:59 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:108:61 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:156:64 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:171:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:189:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_calendar_selector.dart:110:52 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_calendar_selector.dart:135:58 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_calendar_selector.dart:173:45 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:76:59 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:112:60 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:130:49 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:142:59 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:159:59 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:320:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:322:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:331:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:333:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:341:31 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:343:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:352:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:354:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:362:29 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:364:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:372:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:374:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:382:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:384:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:394:29 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:396:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\late_workers_alert.dart:22:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\late_workers_alert.dart:25:39 - deprecated_member_use - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\client\client_main\lib\src\client_main_module.dart:6:8 - depend_on_referenced_packages - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\client\client_main\lib\src\presentation\blocs\client_main_cubit.dart:3:8 - depend_on_referenced_packages -warning - Missing type annotation - packages\features\client\create_order\lib\src\data\repositories_impl\client_create_order_repository_impl.dart:30:12 - always_specify_types - info - Don't invoke 'print' in production code - packages\features\client\create_order\lib\src\data\repositories_impl\client_create_order_repository_impl.dart:131:7 - avoid_print -warning - The member 'emit' can only be used within 'package:bloc/src/bloc.dart' or a test - packages\features\client\create_order\lib\src\presentation\blocs\one_time_order_bloc.dart:71:23 - invalid_use_of_visible_for_testing_member -warning - The member 'emit' can only be used within 'package:bloc/src/bloc.dart' or a test - packages\features\client\create_order\lib\src\presentation\blocs\one_time_order_bloc.dart:75:7 - invalid_use_of_visible_for_testing_member - info - Don't invoke 'print' in production code - packages\features\client\create_order\lib\src\presentation\widgets\rapid_order\rapid_order_view.dart:292:21 - avoid_print -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:25:10 - always_specify_types -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:42:17 - always_specify_types -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:42:29 - always_specify_types -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:45:17 - always_specify_types -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:45:29 - always_specify_types -warning - The name HubCreationFailedException is shown, but isn't used - packages\features\client\hubs\lib\src\data\repositories_impl\hub_repository_impl.dart:12:9 - unused_shown_name - info - Constructor declarations should be before non-constructor declarations - packages\features\client\settings\lib\src\domain\usecases\sign_out_usecase.dart:13:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\client\settings\lib\src\presentation\blocs\client_settings_bloc.dart:14:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\client\settings\lib\src\presentation\blocs\client_settings_state.dart:25:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\client\settings\lib\src\presentation\widgets\client_settings_page\settings_profile_header.dart:80:23 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\client\settings\lib\src\presentation\widgets\client_settings_page\settings_quick_links.dart:69:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:15:3 - sort_constructors_first - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:43:5 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:66:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:118:5 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:124:7 - avoid_print - info - Constructor declarations should be before non-constructor declarations - packages\features\client\view_orders\lib\src\domain\usecases\get_orders_use_case.dart:15:3 - sort_constructors_first - error - The argument type 'Null Function(ViewOrdersState)' can't be assigned to the parameter type 'Emitter'. - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:42:13 - argument_type_not_assignable - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:248:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:257:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:266:7 - avoid_print -warning - The declaration '_applyApplications' isn't referenced - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:323:19 - unused_element -warning - The declaration '_isSameDay' isn't referenced - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:357:8 - unused_element -warning - The declaration '_calculateCalendarDays' isn't referenced - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:361:18 - unused_element -warning - The declaration '_calculateFilteredOrders' isn't referenced - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:376:19 - unused_element - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:402:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:410:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:418:7 - avoid_print -warning - The declaration '_calculateCategoryCount' isn't referenced - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:426:7 - unused_element - error - Undefined name 'state' - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:427:9 - undefined_identifier - error - Undefined name 'state' - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:431:14 - undefined_identifier - error - Undefined name 'state' - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:434:14 - undefined_identifier - error - Undefined name 'state' - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:438:14 - undefined_identifier -warning - The declaration '_calculateUpNextCount' isn't referenced - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:445:7 - unused_element - error - Undefined name 'state' - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:446:9 - undefined_identifier - error - Undefined name 'state' - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:450:14 - undefined_identifier - error - Undefined name 'state' - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:452:12 - undefined_identifier - error - Expected a method, getter, setter or operator declaration - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:461:1 - expected_executable -warning - The declaration '_formatDate' isn't referenced - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:84:10 - unused_element -warning - The receiver can't be null, so the null-aware operator '?.' is unnecessary - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:833:55 - invalid_null_aware_operator - info - Type could be non-nullable - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:872:7 - unnecessary_nullable_for_final_variable_declarations - info - Don't use 'BuildContext's across async gaps, guarded by an unrelated 'mounted' check - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:1615:39 - use_build_context_synchronously - info - Don't use 'BuildContext's across async gaps, guarded by an unrelated 'mounted' check - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:1635:39 - use_build_context_synchronously - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\data\repositories_impl\place_repository_impl.dart:9:3 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\data\repositories_impl\place_repository_impl.dart:13:31 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\data\repositories_impl\place_repository_impl.dart:40:21 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\data\repositories_impl\profile_setup_repository_impl.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\arguments\sign_in_with_phone_arguments.dart:13:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\arguments\verify_otp_arguments.dart:21:9 - sort_constructors_first -warning - Unused import: 'package:krow_domain/krow_domain.dart' - packages\features\staff\authentication\lib\src\domain\repositories\profile_setup_repository.dart:1:8 - unused_import - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\usecases\search_cities_usecase.dart:6:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\usecases\sign_in_with_phone_usecase.dart:15:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\usecases\submit_profile_setup_usecase.dart:6:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\usecases\verify_otp_usecase.dart:15:3 - sort_constructors_first - info - The imported package 'bloc' isn't a dependency of the importing package - packages\features\staff\authentication\lib\src\presentation\blocs\auth_bloc.dart:3:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_bloc.dart:29:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:19:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:39:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:57:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:67:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:78:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:89:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_state.dart:49:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:117:48 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:124:7 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:128:48 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:136:46 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:17:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:29:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:41:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:53:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:65:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:77:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:89:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_state.dart:36:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\pages\phone_verification_page.dart:23:9 - sort_constructors_first - info - 'WillPopScope' is deprecated and shouldn't be used. Use PopScope instead. The Android predictive back feature will not work with WillPopScope. This feature was deprecated after v3.12.0-1.0.pre - packages\features\staff\authentication\lib\src\presentation\pages\phone_verification_page.dart:138:24 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\authentication\lib\src\presentation\pages\profile_setup_page.dart:157:27 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\common\section_title_subtitle.dart:12:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_actions.dart:9:9 - sort_constructors_first - info - Unnecessary instance of 'Container' - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:9:12 - avoid_unnecessary_containers -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:11:19 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:25:50 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:32:36 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:32:45 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:32:52 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:43:23 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:57:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:66:43 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification.dart:24:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_input_field.dart:20:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_input_field.dart:31:52 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_input_field.dart:35:39 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_input_field.dart:75:21 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_resend_section.dart:14:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_resend_section.dart:35:5 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_verification_actions.dart:18:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_verification_actions.dart:38:17 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_verification_header.dart:11:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\phone_input\phone_input_actions.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\phone_input\phone_input_form_field.dart:20:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_basic_info.dart:21:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_experience.dart:22:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_header.dart:17:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:24:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:92:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:92:33 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:94:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:94:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:104:28 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:106:41 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:116:36 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:116:45 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:117:31 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:117:40 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:118:19 - always_specify_types - info - Library names are not necessary - packages\features\staff\authentication\lib\staff_authentication.dart:1:9 - unnecessary_library_name - info - Statements in an if should be enclosed in a block - packages\features\staff\availability\lib\src\data\repositories_impl\availability_repository_impl.dart:148:28 - curly_braces_in_flow_control_structures - info - Statements in an if should be enclosed in a block - packages\features\staff\availability\lib\src\data\repositories_impl\availability_repository_impl.dart:149:35 - curly_braces_in_flow_control_structures - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:100:45 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:122:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:192:30 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:193:38 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:224:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:310:49 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:341:42 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:383:33 - deprecated_member_use - info - 'activeColor' is deprecated and shouldn't be used. Use activeThumbColor instead. This feature was deprecated after v3.31.0-2.0.pre - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:418:17 - deprecated_member_use - info - Unnecessary use of 'toList' in a spread - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:431:14 - unnecessary_to_list_in_spreads - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:484:36 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:485:40 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:587:35 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\availability\lib\staff_availability.dart:1:9 - unnecessary_library_name -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\data\repositories_impl\clock_in_repository_impl.dart:109:78 - always_specify_types - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\clock_in\lib\src\presentation\bloc\clock_in_bloc.dart:105:11 - unawaited_futures - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\clock_in\lib\src\presentation\blocs\clock_in_cubit.dart:89:7 - unawaited_futures -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\blocs\clock_in_cubit.dart:130:11 - always_specify_types -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\blocs\clock_in_cubit.dart:147:11 - always_specify_types -warning - The value of the local variable 'checkInStr' isn't used - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:68:24 - unused_local_variable -warning - The value of the local variable 'checkOutStr' isn't used - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:71:24 - unused_local_variable -warning - The declaration '_buildModeTab' isn't referenced - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:465:10 - unused_element - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:483:43 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:523:43 - always_specify_types -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:573:33 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:34:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:100:44 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:106:44 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:112:44 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:118:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:175:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:273:33 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:375:23 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:386:53 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:427:49 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:430:51 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:461:51 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:464:53 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:512:56 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:541:33 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\date_selector.dart:19:34 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\date_selector.dart:44:60 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\date_selector.dart:70:44 - deprecated_member_use - info - Unnecessary use of multiple underscores - packages\features\staff\clock_in\lib\src\presentation\widgets\location_map_placeholder.dart:30:24 - unnecessary_underscores - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\location_map_placeholder.dart:59:41 - deprecated_member_use -warning - The value of the field '_tookLunch' isn't used - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:15:9 - unused_field -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:187:60 - always_specify_types -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:200:60 - always_specify_types - info - 'groupValue' is deprecated and shouldn't be used. Use a RadioGroup ancestor to manage group value instead. This feature was deprecated after v3.32.0-0.0.pre - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:242:16 - deprecated_member_use - info - 'onChanged' is deprecated and shouldn't be used. Use RadioGroup to handle value change instead. This feature was deprecated after v3.32.0-0.0.pre - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:243:16 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:59:7 - always_specify_types -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:84:11 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:99:34 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:152:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:168:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:200:47 - deprecated_member_use - error - The argument type 'void Function(HomeState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\home\lib\src\presentation\blocs\home_cubit.dart:25:13 - argument_type_not_assignable - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\home_header.dart:36:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\home_header.dart:41:49 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\pending_payment_card.dart:24:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\pending_payment_card.dart:24:75 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\pending_payment_card.dart:29:54 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\placeholder_banner.dart:32:44 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\quick_action_item.dart:34:46 - deprecated_member_use -warning - Dead code - packages\features\staff\home\lib\src\presentation\widgets\home_page\recommended_shift_card.dart:193:45 - dead_code -warning - The left operand can't be null, so the right operand is never executed - packages\features\staff\home\lib\src\presentation\widgets\home_page\recommended_shift_card.dart:193:48 - dead_null_aware_expression - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\section_header.dart:52:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\section_header.dart:55:45 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\auto_match_toggle.dart:32:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\auto_match_toggle.dart:42:34 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\auto_match_toggle.dart:61:42 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\auto_match_toggle.dart:62:37 - deprecated_member_use - info - 'background' is deprecated and shouldn't be used. Use surface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\benefits_widget.dart:20:46 - deprecated_member_use - info - 'onBackground' is deprecated and shouldn't be used. Use onSurface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\benefits_widget.dart:25:50 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\benefits_widget.dart:25:63 - deprecated_member_use - info - 'background' is deprecated and shouldn't be used. Use surface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\improve_yourself_widget.dart:56:48 - deprecated_member_use - info - 'onBackground' is deprecated and shouldn't be used. Use onSurface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\improve_yourself_widget.dart:61:52 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\improve_yourself_widget.dart:61:65 - deprecated_member_use - info - 'surfaceVariant' is deprecated and shouldn't be used. Use surfaceContainerHighest instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\improve_yourself_widget.dart:78:56 - deprecated_member_use - info - 'background' is deprecated and shouldn't be used. Use surface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\more_ways_widget.dart:55:48 - deprecated_member_use - info - 'onBackground' is deprecated and shouldn't be used. Use onSurface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\more_ways_widget.dart:60:52 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\more_ways_widget.dart:60:65 - deprecated_member_use - info - 'surfaceVariant' is deprecated and shouldn't be used. Use surfaceContainerHighest instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\more_ways_widget.dart:77:56 - deprecated_member_use - info - Import of a library in the 'lib/src' directory of another package - packages\features\staff\payments\lib\src\payments_module.dart:1:8 - implementation_imports - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\pages\payments_page.dart:114:41 - deprecated_member_use -warning - The value of the local variable 'maxX' isn't used - packages\features\staff\payments\lib\src\presentation\widgets\earnings_graph.dart:36:18 - unused_local_variable - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\earnings_graph.dart:47:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\earnings_graph.dart:105:54 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\payments\lib\src\presentation\widgets\earnings_graph.dart:124:12 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\payment_history_item.dart:37:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\payment_stats_card.dart:26:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\pending_pay_card.dart:27:33 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\data\repositories\profile_repository_impl.dart:34:5 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\data\repositories\profile_repository_impl.dart:39:5 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\domain\usecases\get_profile_usecase.dart:18:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\domain\usecases\sign_out_usecase.dart:19:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\blocs\profile_cubit.dart:16:3 - sort_constructors_first - error - The argument type 'void Function(ProfileState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile\lib\src\presentation\blocs\profile_cubit.dart:28:13 - argument_type_not_assignable -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\blocs\profile_cubit.dart:30:9 - always_specify_types - error - The argument type 'void Function(ProfileState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile\lib\src\presentation\blocs\profile_cubit.dart:51:13 - argument_type_not_assignable - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\blocs\profile_state.dart:36:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\blocs\profile_state.dart:56:30 - always_specify_types -warning - Duplicate import - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:17:8 - duplicate_import -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:64:20 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:64:29 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:69:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:69:28 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:86:11 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:94:25 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:108:33 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:125:37 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:146:37 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:150:41 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:164:37 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:188:37 - always_specify_types - error - The getter 'globe' isn't defined for the type 'UiIcons' - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:190:45 - undefined_getter -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:195:45 - always_specify_types -warning - Unused import: 'package:flutter_bloc/flutter_bloc.dart' - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:4:8 - unused_import - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:18:16 - prefer_const_constructors - error - The getter 'surface' isn't defined for the type 'UiColors' - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:20:25 - undefined_getter - error - The argument type 'BorderRadius' can't be assigned to the parameter type 'double'. - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:21:66 - argument_type_not_assignable -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:26:19 - always_specify_types - error - The getter 'headline4b' isn't defined for the type 'UiTypography' - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:29:33 - undefined_getter - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:32:11 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:38:11 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:44:11 - prefer_const_constructors - error - The argument type 'BorderRadius' can't be assigned to the parameter type 'double'. - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:72:43 - argument_type_not_assignable - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:74:18 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:79:48 - deprecated_member_use - error - The argument type 'BorderRadius' can't be assigned to the parameter type 'double'. - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:80:47 - argument_type_not_assignable -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:88:21 - always_specify_types - error - The getter 'iconSizeMd' isn't defined for the type 'UiConstants' - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:99:35 - undefined_getter - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:12:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:16:5 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:31:22 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:34:25 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:36:17 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:23:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:33:5 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:37:16 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:43:19 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:45:23 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:46:19 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:52:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:56:25 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:68:57 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:74:13 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:78:25 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:82:28 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:88:31 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:90:41 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:94:32 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:96:52 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:106:59 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:124:43 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:126:53 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:149:32 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:151:52 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:164:13 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:171:13 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:173:24 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:178:40 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:22:17 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:22:26 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:23:9 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:24:9 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:25:9 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:32:35 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:13:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:31:18 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:35:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:40:29 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:45:49 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:51:21 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:53:32 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:79:46 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:18:5 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:19:5 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:22:16 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:24:33 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:29:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:32:23 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:47:11 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:58:22 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:15:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:27:16 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:32:20 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:34:40 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:42:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:86:19 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:91:39 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:97:11 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\section_title.dart:10:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\section_title.dart:16:16 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\section_title.dart:17:15 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\data\repositories_impl\certificates_repository_impl.dart:23:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\domain\usecases\get_certificates_usecase.dart:15:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_cubit.dart:11:3 - sort_constructors_first - error - The argument type 'void Function(CertificatesState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_cubit.dart:19:13 - argument_type_not_assignable - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_state.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_state.dart:30:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_state.dart:34:15 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\add_certificate_card.dart:8:9 - sort_constructors_first - info - The imported package 'intl' isn't a dependency of the importing package - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:3:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:14:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:48:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:62:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:99:46 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:416:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_upload_modal.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificates_header.dart:10:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificates_header.dart:42:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificates_header.dart:73:55 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificates_header.dart:103:45 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\compliance\certificates\lib\staff_certificates.dart:1:9 - unnecessary_library_name - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\data\repositories_impl\documents_repository_impl.dart:14:3 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\documents\lib\src\data\repositories_impl\documents_repository_impl.dart:29:12 - always_specify_types -warning - Dead code - packages\features\staff\profile_sections\compliance\documents\lib\src\data\repositories_impl\documents_repository_impl.dart:52:5 - dead_code - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\domain\usecases\get_documents_usecase.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\blocs\documents\documents_cubit.dart:11:3 - sort_constructors_first - error - The argument type 'void Function(DocumentsState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\blocs\documents\documents_cubit.dart:16:13 - argument_type_not_assignable - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\blocs\documents\documents_state.dart:11:9 - sort_constructors_first -warning - Unused import: 'package:krow_core/core.dart' - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\pages\documents_page.dart:11:8 - unused_import - info - Constructors for public widgets should have a named 'key' parameter - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\pages\documents_page.dart:15:7 - use_key_in_widget_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:12:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:35:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:117:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:122:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:127:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:132:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:137:33 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\documents_progress_card.dart:17:9 - sort_constructors_first - info - Library names are not necessary - packages\features\staff\profile_sections\compliance\documents\lib\staff_documents.dart:1:9 - unnecessary_library_name -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\mappers\tax_form_mapper.dart:9:43 - always_specify_types - info - The type of the right operand ('TaxFormType') isn't a subtype or a supertype of the left operand ('EnumValue') - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\mappers\tax_form_mapper.dart:47:23 - unrelated_type_equality_checks - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:194:41 - curly_braces_in_flow_control_structures - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:195:47 - curly_braces_in_flow_control_structures - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:196:44 - curly_braces_in_flow_control_structures - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\get_tax_forms_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\save_i9_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\save_w4_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\submit_i9_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\submit_w4_form_usecase.dart:7:3 - sort_constructors_first - info - The imported package 'uuid' isn't a dependency of the importing package - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:4:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:13:3 - sort_constructors_first - error - The argument type 'void Function(FormI9State)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:100:13 - argument_type_not_assignable -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:102:47 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_state.dart:38:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_state.dart:117:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_cubit.dart:11:3 - sort_constructors_first - error - The argument type 'void Function(TaxFormsState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_cubit.dart:16:13 - argument_type_not_assignable - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_state.dart:11:9 - sort_constructors_first - info - The imported package 'uuid' isn't a dependency of the importing package - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:4:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:13:3 - sort_constructors_first - error - The argument type 'void Function(FormW4State)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:93:13 - argument_type_not_assignable -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:95:47 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_state.dart:32:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_state.dart:92:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:12:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:212:81 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:232:50 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:249:77 - deprecated_member_use - info - 'value' is deprecated and shouldn't be used. Use initialValue instead. This will set the initial value for the form field. This feature was deprecated after v3.33.0-1.0.pre - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:465:21 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:12:9 - sort_constructors_first -warning - The value of the field '_usStates' isn't used - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:27:22 - unused_field - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:258:81 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:278:50 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:295:77 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:446:18 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:40:47 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:148:11 - always_specify_types - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:150:53 - unawaited_futures -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:153:11 - always_specify_types - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:155:53 - unawaited_futures - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:174:41 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\compliance\tax_forms\lib\staff_tax_forms.dart:1:9 - unnecessary_library_name - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\arguments\add_bank_account_params.dart:9:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\arguments\add_bank_account_params.dart:12:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\usecases\add_bank_account_usecase.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\usecases\get_bank_accounts_usecase.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:14:3 - sort_constructors_first - error - The argument type 'void Function(BankAccountState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:24:13 - argument_type_not_assignable - error - The argument type 'void Function(BankAccountState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:74:13 - argument_type_not_assignable - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:12:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:14:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:34:30 - always_specify_types -warning - Unused import: 'package:krow_core/core.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:11:8 - unused_import - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:146:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:202:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:242:37 - deprecated_member_use -warning - Unused import: 'package:flutter_modular/flutter_modular.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:2:8 - unused_import -warning - Unused import: '../blocs/bank_account_cubit.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:4:8 - unused_import - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:11:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:125:34 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\finances\staff_bank_account\lib\staff_bank_account.dart:1:9 - unnecessary_library_name - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:1:8 - depend_on_referenced_packages - info - The imported package 'firebase_data_connect' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:2:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:17:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\arguments\get_time_cards_arguments.dart:8:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\arguments\get_time_cards_arguments.dart:11:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\usecases\get_time_cards_usecase.dart:10:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_bloc.dart:16:3 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:6:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:14:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:19:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:22:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:6:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:17:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:25:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:29:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:31:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:30:12 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:53:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:53:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:65:29 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\month_selector.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\month_selector.dart:29:19 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:17:17 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:30:27 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:42:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:19:17 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:45:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:62:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:64:23 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:15:5 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:22:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:27:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:32:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:37:41 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:43:5 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:54:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:58:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:61:27 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:98:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:116:25 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:139:7 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:141:9 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:155:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:161:17 - always_specify_types - info - Library names are not necessary - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:1:9 - unnecessary_library_name - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:3:8 - depend_on_referenced_packages -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:45:15 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\data\repositories_impl\attire_repository_impl.dart:15:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\arguments\save_attire_arguments.dart:12:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\arguments\upload_attire_photo_arguments.dart:12:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\get_attire_options_usecase.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\save_attire_usecase.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\upload_attire_photo_usecase.dart:10:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:18:3 - sort_constructors_first - error - The argument type 'void Function(AttireState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:29:13 - argument_type_not_assignable - error - The argument type 'void Function(AttireState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:90:13 - argument_type_not_assignable - error - The argument type 'void Function(AttireState)' can't be assigned to the parameter type 'Emitter'. - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:142:13 - argument_type_not_assignable - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_state.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attestation_checkbox.dart:9:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_bottom_bar.dart:12:9 - sort_constructors_first - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:3:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:15:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:56:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:156:46 - deprecated_member_use - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_info_card.dart:3:8 - depend_on_referenced_packages - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_info_card.dart:14:33 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\onboarding\attire\lib\staff_attire.dart:1:9 - unnecessary_library_name - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\emergency_contact\lib\src\presentation\widgets\emergency_contact_info_banner.dart:12:32 - deprecated_member_use - info - Constructors in '@immutable' classes should be declared as 'const' - packages\features\staff\profile_sections\onboarding\experience\lib\src\domain\arguments\save_experience_arguments.dart:7:3 - prefer_const_constructors_in_immutables -warning - The declaration '_buildCustomSkillsList' isn't referenced - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\pages\experience_page.dart:140:10 - unused_element - info - Library names are not necessary - packages\features\staff\profile_sections\onboarding\experience\lib\staff_profile_experience.dart:1:9 - unnecessary_library_name -warning - Missing type annotation - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:82:48 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\widgets\profile_photo_widget.dart:44:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\widgets\profile_photo_widget.dart:74:53 - deprecated_member_use - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\data\repositories_impl\shifts_repository_impl.dart:4:8 - depend_on_referenced_packages - info - The imported package 'firebase_data_connect' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\data\repositories_impl\shifts_repository_impl.dart:5:8 - depend_on_referenced_packages - info - The imported package 'bloc' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:1:8 - depend_on_referenced_packages - info - The imported package 'bloc' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:1:8 - depend_on_referenced_packages - info - The imported package 'meta' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:5:8 - depend_on_referenced_packages - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:32:5 - avoid_print - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:40:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:44:7 - avoid_print - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:128:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:183:57 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:208:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:209:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:216:53 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:74:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:100:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:101:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:108:51 - deprecated_member_use - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:4:8 - depend_on_referenced_packages - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:316:54 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:507:47 - deprecated_member_use - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\staff\staff_main\lib\src\presentation\blocs\staff_main_cubit.dart:2:8 - depend_on_referenced_packages - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\staff\staff_main\lib\src\staff_main_module.dart:3:8 - depend_on_referenced_packages - diff --git a/apps/mobile/analysis_utf8_3.txt b/apps/mobile/analysis_utf8_3.txt deleted file mode 100644 index 8fb19646..00000000 --- a/apps/mobile/analysis_utf8_3.txt +++ /dev/null @@ -1,695 +0,0 @@ -Analyzing mobile... - - info - Library names are not necessary - packages\core\lib\core.dart:1:9 - unnecessary_library_name - info - The imported package 'flutter_bloc' isn't a dependency of the importing package - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:2:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:31:3 - sort_constructors_first -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:37:17 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:46:16 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:57:17 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:57:32 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:68:16 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:98:16 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:107:21 - always_specify_types -warning - Missing type annotation - packages\core\lib\src\presentation\observers\core_bloc_observer.dart:107:32 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:99:47 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:128:51 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:244:55 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:246:64 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\core\lib\src\presentation\widgets\web_mobile_frame.dart:249:49 - deprecated_member_use - info - Dangling library doc comment - packages\core\lib\src\routing\routing.dart:1:1 - dangling_library_doc_comments - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\bloc\locale_event.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\data\datasources\locale_local_data_source.dart:18:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\domain\usecases\get_default_locale_use_case.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\domain\usecases\get_locale_use_case.dart:13:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\domain\usecases\get_supported_locales_use_case.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\core_localization\lib\src\domain\usecases\set_locale_use_case.dart:13:3 - sort_constructors_first - info - The imported package 'firebase_core' isn't a dependency of the importing package - packages\data_connect\lib\src\mixins\data_error_handler.dart:4:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\client_session_store.dart:11:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\client_session_store.dart:26:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\client_session_store.dart:48:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\staff_session_store.dart:8:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\data_connect\lib\src\session\staff_session_store.dart:30:3 - sort_constructors_first - info - Statements in an if should be enclosed in a block - packages\design_system\lib\src\ui_theme.dart:85:19 - curly_braces_in_flow_control_structures -warning - Missing type annotation - packages\design_system\lib\src\ui_theme.dart:258:27 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_app_bar.dart:39:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:43:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:61:3 - sort_constructors_first - info - Constructors in '@immutable' classes should be declared as 'const' - packages\design_system\lib\src\widgets\ui_button.dart:61:3 - prefer_const_constructors_in_immutables - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:79:3 - sort_constructors_first - info - Constructors in '@immutable' classes should be declared as 'const' - packages\design_system\lib\src\widgets\ui_button.dart:79:3 - prefer_const_constructors_in_immutables - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:97:3 - sort_constructors_first - info - Constructors in '@immutable' classes should be declared as 'const' - packages\design_system\lib\src\widgets\ui_button.dart:97:3 - prefer_const_constructors_in_immutables - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_button.dart:115:3 - sort_constructors_first - info - Constructors in '@immutable' classes should be declared as 'const' - packages\design_system\lib\src\widgets\ui_button.dart:115:3 - prefer_const_constructors_in_immutables - info - Type could be non-nullable - packages\design_system\lib\src\widgets\ui_button.dart:135:24 - unnecessary_nullable_for_final_variable_declarations - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_chip.dart:57:9 - sort_constructors_first -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_error_snackbar.dart:38:21 - always_specify_types -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_error_snackbar.dart:45:27 - always_specify_types -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_error_snackbar.dart:50:45 - always_specify_types -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_error_snackbar.dart:82:5 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_icon_button.dart:30:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_icon_button.dart:42:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_icon_button.dart:53:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_step_indicator.dart:18:9 - sort_constructors_first -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_step_indicator.dart:38:19 - always_specify_types -warning - Missing type annotation - packages\design_system\lib\src\widgets\ui_success_snackbar.dart:30:21 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\design_system\lib\src\widgets\ui_success_snackbar.dart:31:13 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\design_system\lib\src\widgets\ui_text_field.dart:59:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:5:68 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:6:16 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:11:18 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:16:16 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\adapters\availability\availability_adapter.dart:25:5 - always_specify_types -warning - Unused import: '../../entities/shifts/shift.dart' - packages\domain\lib\src\adapters\clock_in\clock_in_adapter.dart:1:8 - unused_import -warning - Missing type annotation - packages\domain\lib\src\adapters\profile\bank_account_adapter.dart:34:10 - always_specify_types - info - Angle brackets will be interpreted as HTML - packages\domain\lib\src\adapters\profile\experience_adapter.dart:3:62 - unintended_html_in_doc_comment -warning - Unnecessary cast - packages\domain\lib\src\adapters\profile\tax_form_adapter.dart:21:53 - unnecessary_cast -warning - Missing type annotation - packages\domain\lib\src\adapters\profile\tax_form_adapter.dart:21:65 - always_specify_types - info - The imported package 'intl' isn't a dependency of the importing package - packages\domain\lib\src\adapters\shifts\shift_adapter.dart:1:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\availability\availability_slot.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\availability\availability_slot.dart:32:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\availability\day_availability.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\availability\day_availability.dart:14:18 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\entities\availability\day_availability.dart:30:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\clock_in\attendance_status.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\clock_in\attendance_status.dart:20:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\financial\payment_summary.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\financial\payment_summary.dart:18:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\financial\time_card.dart:50:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\financial\time_card.dart:65:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\attire_item.dart:23:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\experience_skill.dart:21:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\profile\experience_skill.dart:25:49 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\industry.dart:12:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\profile\industry.dart:16:42 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\staff_document.dart:38:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\profile\staff_document.dart:50:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\profile\tax_form.dart:19:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\profile\tax_form.dart:26:21 - always_specify_types -warning - Missing type annotation - packages\domain\lib\src\entities\profile\tax_form.dart:32:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\shifts\shift.dart:33:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\shifts\shift.dart:65:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\domain\lib\src\entities\shifts\shift.dart:102:9 - sort_constructors_first -warning - Missing type annotation - packages\domain\lib\src\entities\shifts\shift.dart:105:30 - always_specify_types - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:35:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:44:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:53:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:62:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:71:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:80:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:89:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:98:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:107:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:116:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:134:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:143:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:152:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:170:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:179:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:188:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:197:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:206:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:224:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:233:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:242:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:260:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:269:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:278:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:291:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:300:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:309:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:318:9 - use_super_parameters - info - Parameter 'technicalMessage' could be a super parameter - packages\domain\lib\src\exceptions\app_exception.dart:327:9 - use_super_parameters -warning - The name GoogleOnlyAccountException is shown, but isn't used - packages\features\client\authentication\lib\src\data\repositories_impl\auth_repository_impl.dart:16:9 - unused_shown_name -warning - The value of the local variable 'newUserData' isn't used - packages\features\client\authentication\lib\src\data\repositories_impl\auth_repository_impl.dart:266:35 - unused_local_variable - info - Implicit tear-off of the 'call' method - packages\features\client\authentication\lib\src\presentation\blocs\client_auth_bloc.dart:58:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\client\authentication\lib\src\presentation\blocs\client_auth_bloc.dart:80:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\client\authentication\lib\src\presentation\blocs\client_auth_bloc.dart:106:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\client\authentication\lib\src\presentation\blocs\client_auth_bloc.dart:128:13 - implicit_call_tearoffs - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:137:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:152:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:200:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:210:47 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\authentication\lib\src\presentation\pages\client_get_started_page.dart:241:35 - deprecated_member_use -warning - Missing type annotation - packages\features\client\authentication\lib\src\presentation\pages\client_sign_up_page.dart:44:12 - always_specify_types - info - Implicit tear-off of the 'call' method - packages\features\client\billing\lib\src\presentation\blocs\billing_bloc.dart:46:13 - implicit_call_tearoffs -warning - The value of the local variable 'currentBill' isn't used - packages\features\client\billing\lib\src\presentation\blocs\billing_bloc.dart:57:22 - unused_local_variable - info - Implicit tear-off of the 'call' method - packages\features\client\billing\lib\src\presentation\blocs\billing_bloc.dart:98:13 - implicit_call_tearoffs - error - Expected a method, getter, setter or operator declaration - packages\features\client\billing\lib\src\presentation\blocs\billing_bloc.dart:172:1 - expected_executable - info - Implicit tear-off of the 'call' method - packages\features\client\client_coverage\lib\src\presentation\blocs\coverage_bloc.dart:46:13 - implicit_call_tearoffs - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:76:59 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:108:61 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:156:64 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:171:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\pages\coverage_page.dart:189:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_calendar_selector.dart:110:52 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_calendar_selector.dart:135:58 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_calendar_selector.dart:173:45 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:76:59 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:112:60 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:130:49 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:142:59 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_header.dart:159:59 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:320:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:322:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:331:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:333:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:341:31 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:343:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:352:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:354:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:362:29 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:364:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:372:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:374:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:382:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:384:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:394:29 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\coverage_shift_list.dart:396:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\late_workers_alert.dart:22:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\client\client_coverage\lib\src\presentation\widgets\late_workers_alert.dart:25:39 - deprecated_member_use - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\client\client_main\lib\src\client_main_module.dart:6:8 - depend_on_referenced_packages - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\client\client_main\lib\src\presentation\blocs\client_main_cubit.dart:3:8 - depend_on_referenced_packages -warning - Missing type annotation - packages\features\client\create_order\lib\src\data\repositories_impl\client_create_order_repository_impl.dart:30:12 - always_specify_types - info - Don't invoke 'print' in production code - packages\features\client\create_order\lib\src\data\repositories_impl\client_create_order_repository_impl.dart:131:7 - avoid_print - info - Implicit tear-off of the 'call' method - packages\features\client\create_order\lib\src\presentation\blocs\client_create_order_bloc.dart:23:13 - implicit_call_tearoffs -warning - The member 'emit' can only be used within 'package:bloc/src/bloc.dart' or a test - packages\features\client\create_order\lib\src\presentation\blocs\one_time_order_bloc.dart:71:23 - invalid_use_of_visible_for_testing_member -warning - The member 'emit' can only be used within 'package:bloc/src/bloc.dart' or a test - packages\features\client\create_order\lib\src\presentation\blocs\one_time_order_bloc.dart:75:7 - invalid_use_of_visible_for_testing_member - info - Implicit tear-off of the 'call' method - packages\features\client\create_order\lib\src\presentation\blocs\one_time_order_bloc.dart:227:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\client\create_order\lib\src\presentation\blocs\rapid_order_bloc.dart:72:15 - implicit_call_tearoffs - info - Don't invoke 'print' in production code - packages\features\client\create_order\lib\src\presentation\widgets\rapid_order\rapid_order_view.dart:292:21 - avoid_print - info - Implicit tear-off of the 'call' method - packages\features\client\home\lib\src\presentation\blocs\client_home_bloc.dart:40:13 - implicit_call_tearoffs -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:25:10 - always_specify_types -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:42:17 - always_specify_types -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:42:29 - always_specify_types -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:45:17 - always_specify_types -warning - Missing type annotation - packages\features\client\home\lib\src\presentation\widgets\coverage_dashboard.dart:45:29 - always_specify_types -warning - The name HubCreationFailedException is shown, but isn't used - packages\features\client\hubs\lib\src\data\repositories_impl\hub_repository_impl.dart:12:9 - unused_shown_name - info - Implicit tear-off of the 'call' method - packages\features\client\hubs\lib\src\presentation\blocs\client_hubs_bloc.dart:71:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\client\hubs\lib\src\presentation\blocs\client_hubs_bloc.dart:90:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\client\hubs\lib\src\presentation\blocs\client_hubs_bloc.dart:130:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\client\hubs\lib\src\presentation\blocs\client_hubs_bloc.dart:156:13 - implicit_call_tearoffs - info - Constructor declarations should be before non-constructor declarations - packages\features\client\settings\lib\src\domain\usecases\sign_out_usecase.dart:13:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\client\settings\lib\src\presentation\blocs\client_settings_bloc.dart:14:3 - sort_constructors_first - info - Implicit tear-off of the 'call' method - packages\features\client\settings\lib\src\presentation\blocs\client_settings_bloc.dart:26:13 - implicit_call_tearoffs - info - Constructor declarations should be before non-constructor declarations - packages\features\client\settings\lib\src\presentation\blocs\client_settings_state.dart:25:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\client\settings\lib\src\presentation\widgets\client_settings_page\settings_profile_header.dart:80:23 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\client\settings\lib\src\presentation\widgets\client_settings_page\settings_quick_links.dart:69:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:15:3 - sort_constructors_first - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:43:5 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:66:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:118:5 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\data\repositories\view_orders_repository_impl.dart:124:7 - avoid_print - info - Constructor declarations should be before non-constructor declarations - packages\features\client\view_orders\lib\src\domain\usecases\get_orders_use_case.dart:15:3 - sort_constructors_first - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:248:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:257:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\client\view_orders\lib\src\presentation\blocs\view_orders_cubit.dart:266:7 - avoid_print -warning - The declaration '_formatDate' isn't referenced - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:84:10 - unused_element -warning - The receiver can't be null, so the null-aware operator '?.' is unnecessary - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:833:55 - invalid_null_aware_operator - info - Type could be non-nullable - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:872:7 - unnecessary_nullable_for_final_variable_declarations - info - Don't use 'BuildContext's across async gaps, guarded by an unrelated 'mounted' check - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:1615:39 - use_build_context_synchronously - info - Don't use 'BuildContext's across async gaps, guarded by an unrelated 'mounted' check - packages\features\client\view_orders\lib\src\presentation\widgets\view_order_card.dart:1635:39 - use_build_context_synchronously - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\data\repositories_impl\place_repository_impl.dart:9:3 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\data\repositories_impl\place_repository_impl.dart:13:31 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\data\repositories_impl\place_repository_impl.dart:40:21 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\data\repositories_impl\profile_setup_repository_impl.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\arguments\sign_in_with_phone_arguments.dart:13:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\arguments\verify_otp_arguments.dart:21:9 - sort_constructors_first -warning - Unused import: 'package:krow_domain/krow_domain.dart' - packages\features\staff\authentication\lib\src\domain\repositories\profile_setup_repository.dart:1:8 - unused_import - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\usecases\search_cities_usecase.dart:6:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\usecases\sign_in_with_phone_usecase.dart:15:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\usecases\submit_profile_setup_usecase.dart:6:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\domain\usecases\verify_otp_usecase.dart:15:3 - sort_constructors_first - info - The imported package 'bloc' isn't a dependency of the importing package - packages\features\staff\authentication\lib\src\presentation\blocs\auth_bloc.dart:3:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_bloc.dart:29:3 - sort_constructors_first - info - Implicit tear-off of the 'call' method - packages\features\staff\authentication\lib\src\presentation\blocs\auth_bloc.dart:114:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\authentication\lib\src\presentation\blocs\auth_bloc.dart:196:13 - implicit_call_tearoffs - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:19:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:39:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:57:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:67:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:78:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_event.dart:89:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\auth_state.dart:49:9 - sort_constructors_first - info - Implicit tear-off of the 'call' method - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:92:13 - implicit_call_tearoffs -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:117:48 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:124:7 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:128:48 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_bloc.dart:136:46 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:17:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:29:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:41:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:53:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:65:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:77:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_event.dart:89:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\blocs\profile_setup\profile_setup_state.dart:36:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\pages\phone_verification_page.dart:23:9 - sort_constructors_first - info - 'WillPopScope' is deprecated and shouldn't be used. Use PopScope instead. The Android predictive back feature will not work with WillPopScope. This feature was deprecated after v3.12.0-1.0.pre - packages\features\staff\authentication\lib\src\presentation\pages\phone_verification_page.dart:138:24 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\authentication\lib\src\presentation\pages\profile_setup_page.dart:157:27 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\common\section_title_subtitle.dart:12:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_actions.dart:9:9 - sort_constructors_first - info - Unnecessary instance of 'Container' - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:9:12 - avoid_unnecessary_containers -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:11:19 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:25:50 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:32:36 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:32:45 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:32:52 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:43:23 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:57:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\authentication\lib\src\presentation\widgets\get_started_page\get_started_background.dart:66:43 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification.dart:24:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_input_field.dart:20:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_input_field.dart:31:52 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_input_field.dart:35:39 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_input_field.dart:75:21 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_resend_section.dart:14:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_resend_section.dart:35:5 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_verification_actions.dart:18:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_verification_actions.dart:38:17 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\otp_verification\otp_verification_header.dart:11:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\phone_input\phone_input_actions.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\phone_verification_page\phone_input\phone_input_form_field.dart:20:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_basic_info.dart:21:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_experience.dart:22:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_header.dart:17:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:24:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:92:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:92:33 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:94:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:94:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:104:28 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:106:41 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:116:36 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:116:45 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:117:31 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:117:40 - always_specify_types -warning - Missing type annotation - packages\features\staff\authentication\lib\src\presentation\widgets\profile_setup_page\profile_setup_location.dart:118:19 - always_specify_types - info - Library names are not necessary - packages\features\staff\authentication\lib\staff_authentication.dart:1:9 - unnecessary_library_name - info - Statements in an if should be enclosed in a block - packages\features\staff\availability\lib\src\data\repositories_impl\availability_repository_impl.dart:148:28 - curly_braces_in_flow_control_structures - info - Statements in an if should be enclosed in a block - packages\features\staff\availability\lib\src\data\repositories_impl\availability_repository_impl.dart:149:35 - curly_braces_in_flow_control_structures - info - Implicit tear-off of the 'call' method - packages\features\staff\availability\lib\src\presentation\blocs\availability_bloc.dart:34:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\availability\lib\src\presentation\blocs\availability_bloc.dart:106:15 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\availability\lib\src\presentation\blocs\availability_bloc.dart:158:15 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\availability\lib\src\presentation\blocs\availability_bloc.dart:198:15 - implicit_call_tearoffs - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:100:45 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:122:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:192:30 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:193:38 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:224:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:310:49 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:341:42 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:383:33 - deprecated_member_use - info - 'activeColor' is deprecated and shouldn't be used. Use activeThumbColor instead. This feature was deprecated after v3.31.0-2.0.pre - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:418:17 - deprecated_member_use - info - Unnecessary use of 'toList' in a spread - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:431:14 - unnecessary_to_list_in_spreads - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:484:36 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:485:40 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\availability\lib\src\presentation\pages\availability_page.dart:587:35 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\availability\lib\staff_availability.dart:1:9 - unnecessary_library_name -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\data\repositories_impl\clock_in_repository_impl.dart:109:78 - always_specify_types - info - Implicit tear-off of the 'call' method - packages\features\staff\clock_in\lib\src\presentation\bloc\clock_in_bloc.dart:52:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\clock_in\lib\src\presentation\bloc\clock_in_bloc.dart:91:13 - implicit_call_tearoffs - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\clock_in\lib\src\presentation\bloc\clock_in_bloc.dart:105:11 - unawaited_futures - info - Implicit tear-off of the 'call' method - packages\features\staff\clock_in\lib\src\presentation\bloc\clock_in_bloc.dart:206:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\clock_in\lib\src\presentation\bloc\clock_in_bloc.dart:229:13 - implicit_call_tearoffs - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\clock_in\lib\src\presentation\blocs\clock_in_cubit.dart:89:7 - unawaited_futures -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\blocs\clock_in_cubit.dart:130:11 - always_specify_types -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\blocs\clock_in_cubit.dart:147:11 - always_specify_types -warning - The value of the local variable 'checkInStr' isn't used - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:68:24 - unused_local_variable -warning - The value of the local variable 'checkOutStr' isn't used - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:71:24 - unused_local_variable -warning - The declaration '_buildModeTab' isn't referenced - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:465:10 - unused_element - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:483:43 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:523:43 - always_specify_types -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\pages\clock_in_page.dart:573:33 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:34:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:100:44 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:106:44 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:112:44 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\attendance_card.dart:118:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:175:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:273:33 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:375:23 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:386:53 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:427:49 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:430:51 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:461:51 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:464:53 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:512:56 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\commute_tracker.dart:541:33 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\date_selector.dart:19:34 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\date_selector.dart:44:60 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\date_selector.dart:70:44 - deprecated_member_use - info - Unnecessary use of multiple underscores - packages\features\staff\clock_in\lib\src\presentation\widgets\location_map_placeholder.dart:30:24 - unnecessary_underscores - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\location_map_placeholder.dart:59:41 - deprecated_member_use -warning - The value of the field '_tookLunch' isn't used - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:15:9 - unused_field -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:187:60 - always_specify_types -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:200:60 - always_specify_types - info - 'groupValue' is deprecated and shouldn't be used. Use a RadioGroup ancestor to manage group value instead. This feature was deprecated after v3.32.0-0.0.pre - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:242:16 - deprecated_member_use - info - 'onChanged' is deprecated and shouldn't be used. Use RadioGroup to handle value change instead. This feature was deprecated after v3.32.0-0.0.pre - packages\features\staff\clock_in\lib\src\presentation\widgets\lunch_break_modal.dart:243:16 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:59:7 - always_specify_types -warning - Missing type annotation - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:84:11 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:99:34 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:152:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:168:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\clock_in\lib\src\presentation\widgets\swipe_to_check_in.dart:200:47 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\home_header.dart:36:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\home_header.dart:41:49 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\pending_payment_card.dart:24:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\pending_payment_card.dart:24:75 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\pending_payment_card.dart:29:54 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\placeholder_banner.dart:32:44 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\quick_action_item.dart:34:46 - deprecated_member_use -warning - Dead code - packages\features\staff\home\lib\src\presentation\widgets\home_page\recommended_shift_card.dart:193:45 - dead_code -warning - The left operand can't be null, so the right operand is never executed - packages\features\staff\home\lib\src\presentation\widgets\home_page\recommended_shift_card.dart:193:48 - dead_null_aware_expression - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\section_header.dart:52:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\home_page\section_header.dart:55:45 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\auto_match_toggle.dart:32:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\auto_match_toggle.dart:42:34 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\auto_match_toggle.dart:61:42 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\auto_match_toggle.dart:62:37 - deprecated_member_use - info - 'background' is deprecated and shouldn't be used. Use surface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\benefits_widget.dart:20:46 - deprecated_member_use - info - 'onBackground' is deprecated and shouldn't be used. Use onSurface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\benefits_widget.dart:25:50 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\benefits_widget.dart:25:63 - deprecated_member_use - info - 'background' is deprecated and shouldn't be used. Use surface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\improve_yourself_widget.dart:56:48 - deprecated_member_use - info - 'onBackground' is deprecated and shouldn't be used. Use onSurface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\improve_yourself_widget.dart:61:52 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\improve_yourself_widget.dart:61:65 - deprecated_member_use - info - 'surfaceVariant' is deprecated and shouldn't be used. Use surfaceContainerHighest instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\improve_yourself_widget.dart:78:56 - deprecated_member_use - info - 'background' is deprecated and shouldn't be used. Use surface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\more_ways_widget.dart:55:48 - deprecated_member_use - info - 'onBackground' is deprecated and shouldn't be used. Use onSurface instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\more_ways_widget.dart:60:52 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\home\lib\src\presentation\widgets\worker\more_ways_widget.dart:60:65 - deprecated_member_use - info - 'surfaceVariant' is deprecated and shouldn't be used. Use surfaceContainerHighest instead. This feature was deprecated after v3.18.0-0.1.pre - packages\features\staff\home\lib\src\presentation\widgets\worker\more_ways_widget.dart:77:56 - deprecated_member_use - info - Import of a library in the 'lib/src' directory of another package - packages\features\staff\payments\lib\src\payments_module.dart:1:8 - implementation_imports - info - Implicit tear-off of the 'call' method - packages\features\staff\payments\lib\src\presentation\blocs\payments\payments_bloc.dart:28:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\payments\lib\src\presentation\blocs\payments\payments_bloc.dart:54:15 - implicit_call_tearoffs - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\pages\payments_page.dart:114:41 - deprecated_member_use -warning - The value of the local variable 'maxX' isn't used - packages\features\staff\payments\lib\src\presentation\widgets\earnings_graph.dart:36:18 - unused_local_variable - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\earnings_graph.dart:47:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\earnings_graph.dart:105:54 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\payments\lib\src\presentation\widgets\earnings_graph.dart:124:12 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\payment_history_item.dart:37:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\payment_stats_card.dart:26:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\payments\lib\src\presentation\widgets\pending_pay_card.dart:27:33 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\data\repositories\profile_repository_impl.dart:34:5 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\data\repositories\profile_repository_impl.dart:39:5 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\domain\usecases\get_profile_usecase.dart:18:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\domain\usecases\sign_out_usecase.dart:19:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\blocs\profile_cubit.dart:16:3 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\blocs\profile_cubit.dart:30:9 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\blocs\profile_state.dart:36:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\blocs\profile_state.dart:56:30 - always_specify_types -warning - Duplicate import - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:17:8 - duplicate_import -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:64:20 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:64:29 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:69:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:69:28 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:86:11 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:94:25 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:108:33 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:125:37 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:146:37 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:150:41 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:164:37 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:188:37 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\pages\staff_profile_page.dart:195:45 - always_specify_types -warning - Unused import: 'package:flutter_bloc/flutter_bloc.dart' - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:4:8 - unused_import - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:18:16 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:19:19 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:21:23 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:21:50 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:26:19 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:32:11 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:38:11 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:44:11 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:74:18 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:88:21 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\language_selector_bottom_sheet.dart:96:15 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:12:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:16:5 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:31:22 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:34:25 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\logout_button.dart:36:17 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:23:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:33:5 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:37:16 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:43:19 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:45:23 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:46:19 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:52:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:56:25 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:68:57 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:74:13 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:78:25 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:82:28 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:88:31 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:90:41 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:94:32 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:96:52 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:106:59 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:124:43 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:126:53 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:149:32 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:151:52 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:164:13 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:171:13 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:173:24 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_header.dart:178:40 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:22:17 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:22:26 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:23:9 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:24:9 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:25:9 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_grid.dart:32:35 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:13:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:31:18 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:35:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:40:29 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:45:49 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:51:21 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:53:32 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\profile_menu_item.dart:79:46 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:18:5 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:19:5 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:22:16 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:24:33 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:29:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:32:23 - always_specify_types - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:47:11 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_score_bar.dart:58:22 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:15:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:27:16 - prefer_const_constructors -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:32:20 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:34:40 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:42:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:86:19 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:91:39 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\reliability_stats_card.dart:97:11 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile\lib\src\presentation\widgets\section_title.dart:10:9 - sort_constructors_first - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\section_title.dart:16:16 - prefer_const_constructors - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile\lib\src\presentation\widgets\section_title.dart:17:15 - prefer_const_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\data\repositories_impl\certificates_repository_impl.dart:23:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\domain\usecases\get_certificates_usecase.dart:15:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_cubit.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_state.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_state.dart:30:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\blocs\certificates\certificates_state.dart:34:15 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\add_certificate_card.dart:8:9 - sort_constructors_first - info - The imported package 'intl' isn't a dependency of the importing package - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:3:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:14:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:48:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:62:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:99:46 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_card.dart:416:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificate_upload_modal.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificates_header.dart:10:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificates_header.dart:42:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificates_header.dart:73:55 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\certificates\lib\src\presentation\widgets\certificates_header.dart:103:45 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\compliance\certificates\lib\staff_certificates.dart:1:9 - unnecessary_library_name - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\data\repositories_impl\documents_repository_impl.dart:14:3 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\documents\lib\src\data\repositories_impl\documents_repository_impl.dart:29:12 - always_specify_types -warning - Dead code - packages\features\staff\profile_sections\compliance\documents\lib\src\data\repositories_impl\documents_repository_impl.dart:52:5 - dead_code - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\domain\usecases\get_documents_usecase.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\blocs\documents\documents_cubit.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\blocs\documents\documents_state.dart:11:9 - sort_constructors_first -warning - Unused import: 'package:krow_core/core.dart' - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\pages\documents_page.dart:11:8 - unused_import - info - Constructors for public widgets should have a named 'key' parameter - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\pages\documents_page.dart:15:7 - use_key_in_widget_constructors - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:12:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:35:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:117:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:122:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:127:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:132:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\document_card.dart:137:33 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\documents\lib\src\presentation\widgets\documents_progress_card.dart:17:9 - sort_constructors_first - info - Library names are not necessary - packages\features\staff\profile_sections\compliance\documents\lib\staff_documents.dart:1:9 - unnecessary_library_name -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\mappers\tax_form_mapper.dart:9:43 - always_specify_types - info - The type of the right operand ('TaxFormType') isn't a subtype or a supertype of the left operand ('EnumValue') - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\mappers\tax_form_mapper.dart:47:23 - unrelated_type_equality_checks - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:194:41 - curly_braces_in_flow_control_structures - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:195:47 - curly_braces_in_flow_control_structures - info - Statements in an if should be enclosed in a block - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\data\repositories\tax_forms_repository_impl.dart:196:44 - curly_braces_in_flow_control_structures - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\get_tax_forms_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\save_i9_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\save_w4_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\submit_i9_form_usecase.dart:7:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\domain\usecases\submit_w4_form_usecase.dart:7:3 - sort_constructors_first - info - The imported package 'uuid' isn't a dependency of the importing package - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:4:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:13:3 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_cubit.dart:102:47 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_state.dart:38:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\i9\form_i9_state.dart:117:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_cubit.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\tax_forms\tax_forms_state.dart:11:9 - sort_constructors_first - info - The imported package 'uuid' isn't a dependency of the importing package - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:4:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:13:3 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_cubit.dart:95:47 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_state.dart:32:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\blocs\w4\form_w4_state.dart:92:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:12:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:212:81 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:232:50 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:249:77 - deprecated_member_use - info - 'value' is deprecated and shouldn't be used. Use initialValue instead. This will set the initial value for the form field. This feature was deprecated after v3.33.0-1.0.pre - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_i9_page.dart:465:21 - deprecated_member_use - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:12:9 - sort_constructors_first -warning - The value of the field '_usStates' isn't used - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:27:22 - unused_field - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:258:81 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:278:50 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:295:77 - deprecated_member_use - info - Use 'const' with the constructor to improve performance - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\form_w4_page.dart:446:18 - prefer_const_constructors - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:40:47 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:148:11 - always_specify_types - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:150:53 - unawaited_futures -warning - Missing type annotation - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:153:11 - always_specify_types - info - Missing an 'await' for the 'Future' computed by this expression - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:155:53 - unawaited_futures - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\compliance\tax_forms\lib\src\presentation\pages\tax_forms_page.dart:174:41 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\compliance\tax_forms\lib\staff_tax_forms.dart:1:9 - unnecessary_library_name - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\arguments\add_bank_account_params.dart:9:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\arguments\add_bank_account_params.dart:12:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\usecases\add_bank_account_usecase.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\domain\usecases\get_bank_accounts_usecase.dart:9:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_cubit.dart:14:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:12:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:14:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\blocs\bank_account_state.dart:34:30 - always_specify_types -warning - Unused import: 'package:krow_core/core.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:11:8 - unused_import - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:146:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:202:39 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\pages\bank_account_page.dart:242:37 - deprecated_member_use -warning - Unused import: 'package:flutter_modular/flutter_modular.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:2:8 - unused_import -warning - Unused import: '../blocs/bank_account_cubit.dart' - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:4:8 - unused_import - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:11:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\staff_bank_account\lib\src\presentation\widgets\add_account_form.dart:125:34 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\finances\staff_bank_account\lib\staff_bank_account.dart:1:9 - unnecessary_library_name - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:1:8 - depend_on_referenced_packages - info - The imported package 'firebase_data_connect' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:2:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\data\repositories_impl\time_card_repository_impl.dart:17:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\arguments\get_time_cards_arguments.dart:8:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\arguments\get_time_cards_arguments.dart:11:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\domain\usecases\get_time_cards_usecase.dart:10:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_bloc.dart:16:3 - sort_constructors_first - info - Implicit tear-off of the 'call' method - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_bloc.dart:28:13 - implicit_call_tearoffs -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:6:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:14:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:19:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_event.dart:22:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:6:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:17:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:25:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:29:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\blocs\time_card_state.dart:31:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:30:12 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:53:21 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:53:30 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\pages\time_card_page.dart:65:29 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\month_selector.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\month_selector.dart:29:19 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:17:17 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:30:27 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\shift_history_list.dart:42:30 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:10:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:19:17 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:45:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:62:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\time_card_summary.dart:64:23 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:11:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:15:5 - always_specify_types - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:22:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:27:41 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:32:37 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:37:41 - deprecated_member_use -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:43:5 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:54:19 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:58:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:61:27 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:98:23 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:116:25 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:139:7 - always_specify_types -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:141:9 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:155:9 - sort_constructors_first -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\presentation\widgets\timesheet_card.dart:161:17 - always_specify_types - info - Library names are not necessary - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:1:9 - unnecessary_library_name - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:3:8 - depend_on_referenced_packages -warning - Missing type annotation - packages\features\staff\profile_sections\finances\time_card\lib\src\staff_time_card_module.dart:45:15 - always_specify_types - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\data\repositories_impl\attire_repository_impl.dart:15:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\arguments\save_attire_arguments.dart:12:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\arguments\upload_attire_photo_arguments.dart:12:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\get_attire_options_usecase.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\save_attire_usecase.dart:11:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\domain\usecases\upload_attire_photo_usecase.dart:10:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_cubit.dart:18:3 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\blocs\attire_state.dart:15:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attestation_checkbox.dart:9:9 - sort_constructors_first - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_bottom_bar.dart:12:9 - sort_constructors_first - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:3:8 - depend_on_referenced_packages - info - Constructor declarations should be before non-constructor declarations - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:15:9 - sort_constructors_first - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:56:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_grid.dart:156:46 - deprecated_member_use - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_info_card.dart:3:8 - depend_on_referenced_packages - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\attire\lib\src\presentation\widgets\attire_info_card.dart:14:33 - deprecated_member_use - info - Library names are not necessary - packages\features\staff\profile_sections\onboarding\attire\lib\staff_attire.dart:1:9 - unnecessary_library_name - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\emergency_contact\lib\src\presentation\widgets\emergency_contact_info_banner.dart:12:32 - deprecated_member_use - info - Constructors in '@immutable' classes should be declared as 'const' - packages\features\staff\profile_sections\onboarding\experience\lib\src\domain\arguments\save_experience_arguments.dart:7:3 - prefer_const_constructors_in_immutables - info - Implicit tear-off of the 'call' method - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\blocs\experience_bloc.dart:127:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\blocs\experience_bloc.dart:192:13 - implicit_call_tearoffs -warning - The declaration '_buildCustomSkillsList' isn't referenced - packages\features\staff\profile_sections\onboarding\experience\lib\src\presentation\pages\experience_page.dart:140:10 - unused_element - info - Library names are not necessary - packages\features\staff\profile_sections\onboarding\experience\lib\staff_profile_experience.dart:1:9 - unnecessary_library_name - info - Implicit tear-off of the 'call' method - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:45:13 - implicit_call_tearoffs -warning - Missing type annotation - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:82:48 - always_specify_types - info - Implicit tear-off of the 'call' method - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\blocs\personal_info_bloc.dart:96:13 - implicit_call_tearoffs - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\widgets\profile_photo_widget.dart:44:43 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\profile_sections\onboarding\profile_info\lib\src\presentation\widgets\profile_photo_widget.dart:74:53 - deprecated_member_use - info - The imported package 'firebase_auth' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\data\repositories_impl\shifts_repository_impl.dart:4:8 - depend_on_referenced_packages - info - The imported package 'firebase_data_connect' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\data\repositories_impl\shifts_repository_impl.dart:5:8 - depend_on_referenced_packages - info - The imported package 'bloc' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:1:8 - depend_on_referenced_packages - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:32:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:52:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shift_details\shift_details_bloc.dart:72:13 - implicit_call_tearoffs - info - The imported package 'bloc' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:1:8 - depend_on_referenced_packages - info - The imported package 'meta' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:5:8 - depend_on_referenced_packages - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:50:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:86:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:115:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:163:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:203:13 - implicit_call_tearoffs - info - Implicit tear-off of the 'call' method - packages\features\staff\shifts\lib\src\presentation\blocs\shifts\shifts_bloc.dart:249:15 - implicit_call_tearoffs - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:32:5 - avoid_print - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:40:7 - avoid_print - info - Don't invoke 'print' in production code - packages\features\staff\shifts\lib\src\presentation\pages\shifts_page.dart:44:7 - avoid_print - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:128:35 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:183:57 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:208:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:209:48 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\my_shift_card.dart:216:53 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:74:33 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:100:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:101:46 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\shift_assignment_card.dart:108:51 - deprecated_member_use - info - The imported package 'lucide_icons' isn't a dependency of the importing package - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:4:8 - depend_on_referenced_packages - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:316:54 - deprecated_member_use - info - 'withOpacity' is deprecated and shouldn't be used. Use .withValues() to avoid precision loss - packages\features\staff\shifts\lib\src\presentation\widgets\tabs\my_shifts_tab.dart:507:47 - deprecated_member_use - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\staff\staff_main\lib\src\presentation\blocs\staff_main_cubit.dart:2:8 - depend_on_referenced_packages - info - The imported package 'krow_core' isn't a dependency of the importing package - packages\features\staff\staff_main\lib\src\staff_main_module.dart:3:8 - depend_on_referenced_packages - diff --git a/apps/mobile/packages/core_localization/lib/src/l10n/en.i18n.json b/apps/mobile/packages/core_localization/lib/src/l10n/en.i18n.json index 9eaf5902..3326d7e9 100644 --- a/apps/mobile/packages/core_localization/lib/src/l10n/en.i18n.json +++ b/apps/mobile/packages/core_localization/lib/src/l10n/en.i18n.json @@ -680,7 +680,8 @@ "title": "Shifts", "tabs": { "my_shifts": "My Shifts", - "find_work": "Find Work" + "find_work": "Find Shifts", + "history": "History" }, "list": { "no_shifts": "No shifts found", @@ -735,7 +736,7 @@ }, "errors": { "auth": { - "invalid_credentials": "The email or password you entered is incorrect.", + "invalid_credentials": "Invalid verification code or password. Please try again.", "account_exists": "An account with this email already exists. Try signing in instead.", "session_expired": "Your session has expired. Please sign in again.", "user_not_found": "We couldn't find your account. Please check your email and try again.", diff --git a/apps/mobile/packages/core_localization/lib/src/l10n/es.i18n.json b/apps/mobile/packages/core_localization/lib/src/l10n/es.i18n.json index 4f80e30a..bf7e54a6 100644 --- a/apps/mobile/packages/core_localization/lib/src/l10n/es.i18n.json +++ b/apps/mobile/packages/core_localization/lib/src/l10n/es.i18n.json @@ -680,7 +680,8 @@ "title": "Turnos", "tabs": { "my_shifts": "Mis Turnos", - "find_work": "Buscar Trabajo" + "find_work": "Buscar Trabajo", + "history": "Historial" }, "list": { "no_shifts": "No se encontraron turnos", diff --git a/apps/mobile/packages/data_connect/lib/src/mixins/data_error_handler.dart b/apps/mobile/packages/data_connect/lib/src/mixins/data_error_handler.dart index d84b24e1..27ca4624 100644 --- a/apps/mobile/packages/data_connect/lib/src/mixins/data_error_handler.dart +++ b/apps/mobile/packages/data_connect/lib/src/mixins/data_error_handler.dart @@ -24,11 +24,17 @@ mixin DataErrorHandler { } on SocketException catch (e) { throw NetworkException(technicalMessage: 'SocketException: ${e.message}'); } on FirebaseException catch (e) { - if (e.code == 'unavailable' || e.code == 'network-request-failed') { + final String code = e.code.toLowerCase(); + final String msg = (e.message ?? '').toLowerCase(); + if (code == 'unavailable' || + code == 'network-request-failed' || + msg.contains('offline') || + msg.contains('network') || + msg.contains('connection failed')) { throw NetworkException( technicalMessage: 'Firebase ${e.code}: ${e.message}'); } - if (e.code == 'deadline-exceeded') { + if (code == 'deadline-exceeded') { throw ServiceUnavailableException( technicalMessage: 'Firebase ${e.code}: ${e.message}'); } @@ -36,8 +42,28 @@ mixin DataErrorHandler { throw ServerException( technicalMessage: 'Firebase ${e.code}: ${e.message}'); } catch (e) { + final String errorStr = e.toString().toLowerCase(); + if (errorStr.contains('socketexception') || + errorStr.contains('network') || + errorStr.contains('offline') || + errorStr.contains('connection failed') || + errorStr.contains('unavailable') || + errorStr.contains('handshake') || + errorStr.contains('clientexception') || + errorStr.contains('failed host lookup') || + errorStr.contains('connection error') || + errorStr.contains('grpc error') || + errorStr.contains('terminated') || + errorStr.contains('connectexception')) { + throw NetworkException(technicalMessage: e.toString()); + } + // If it's already an AppException, rethrow it if (e is AppException) rethrow; + + // Debugging: Log unexpected errors + print('DataErrorHandler: Unhandled exception caught: $e'); + throw UnknownException(technicalMessage: e.toString()); } } diff --git a/apps/mobile/packages/features/client/billing/lib/src/presentation/pages/billing_page.dart b/apps/mobile/packages/features/client/billing/lib/src/presentation/pages/billing_page.dart index ee690605..500cb16f 100644 --- a/apps/mobile/packages/features/client/billing/lib/src/presentation/pages/billing_page.dart +++ b/apps/mobile/packages/features/client/billing/lib/src/presentation/pages/billing_page.dart @@ -180,9 +180,16 @@ class _BillingViewState extends State { } if (state.status == BillingStatus.failure) { + WidgetsBinding.instance.addPostFrameCallback((_) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(translateErrorKey(state.errorMessage!))), + ); + }); return Center( child: Text( - state.errorMessage ?? 'An error occurred', + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'An error occurred', style: UiTypography.body1r.textError, ), ); diff --git a/apps/mobile/packages/features/staff/authentication/lib/src/data/repositories_impl/auth_repository_impl.dart b/apps/mobile/packages/features/staff/authentication/lib/src/data/repositories_impl/auth_repository_impl.dart index e7aa6a97..36f3ffe5 100644 --- a/apps/mobile/packages/features/staff/authentication/lib/src/data/repositories_impl/auth_repository_impl.dart +++ b/apps/mobile/packages/features/staff/authentication/lib/src/data/repositories_impl/auth_repository_impl.dart @@ -60,9 +60,17 @@ class AuthRepositoryImpl }, verificationFailed: (FirebaseAuthException e) { if (!completer.isCompleted) { - completer.completeError( - Exception(e.message ?? 'Phone verification failed.'), - ); + // Map Firebase network errors to NetworkException + if (e.code == 'network-request-failed' || + e.message?.contains('Unable to resolve host') == true) { + completer.completeError( + const domain.NetworkException(technicalMessage: 'Auth network failure'), + ); + } else { + completer.completeError( + domain.SignInFailedException(technicalMessage: 'Firebase ${e.code}: ${e.message}'), + ); + } } }, codeSent: (String verificationId, _) { @@ -107,10 +115,25 @@ class AuthRepositoryImpl verificationId: verificationId, smsCode: smsCode, ); - final UserCredential userCredential = await firebaseAuth.signInWithCredential(credential); + final UserCredential userCredential = await executeProtected( + () async { + try { + return await firebaseAuth.signInWithCredential(credential); + } on FirebaseAuthException catch (e) { + if (e.code == 'invalid-verification-code') { + throw const domain.InvalidCredentialsException( + technicalMessage: 'Invalid OTP code entered.', + ); + } + rethrow; + } + }, + ); final User? firebaseUser = userCredential.user; if (firebaseUser == null) { - throw Exception('Phone verification failed, no Firebase user received.'); + throw const domain.SignInFailedException( + technicalMessage: 'Phone verification failed, no Firebase user received.', + ); } final QueryResult response = @@ -135,7 +158,9 @@ class AuthRepositoryImpl } else { if (user.userRole != 'STAFF') { await firebaseAuth.signOut(); - throw Exception('User is not authorized for this app.'); + throw const domain.UnauthorizedAppException( + technicalMessage: 'User is not authorized for this app.', + ); } final QueryResult staffResponse = await executeProtected(() => dataConnect @@ -145,19 +170,23 @@ class AuthRepositoryImpl .execute()); if (staffResponse.data.staffs.isNotEmpty) { await firebaseAuth.signOut(); - throw Exception( - 'This user already has a staff profile. Please log in.', + throw const domain.AccountExistsException( + technicalMessage: 'This user already has a staff profile. Please log in.', ); } } } else { if (user == null) { await firebaseAuth.signOut(); - throw Exception('Authenticated user profile not found in database.'); + throw const domain.UserNotFoundException( + technicalMessage: 'Authenticated user profile not found in database.', + ); } if (user.userRole != 'STAFF') { await firebaseAuth.signOut(); - throw Exception('User is not authorized for this app.'); + throw const domain.UnauthorizedAppException( + technicalMessage: 'User is not authorized for this app.', + ); } final QueryResult @@ -168,8 +197,8 @@ class AuthRepositoryImpl .execute()); if (staffResponse.data.staffs.isEmpty) { await firebaseAuth.signOut(); - throw Exception( - 'Your account is not registered yet. Please register first.', + throw const domain.UserNotFoundException( + technicalMessage: 'Your account is not registered yet. Please register first.', ); } staffRecord = staffResponse.data.staffs.first; diff --git a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/pages/phone_verification_page.dart b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/pages/phone_verification_page.dart index 830ded01..878c1b4b 100644 --- a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/pages/phone_verification_page.dart +++ b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/pages/phone_verification_page.dart @@ -38,7 +38,9 @@ class _PhoneVerificationPageState extends State { @override void dispose() { - _authBloc.add(AuthResetRequested(mode: widget.mode)); + if (!_authBloc.isClosed) { + _authBloc.add(AuthResetRequested(mode: widget.mode)); + } super.dispose(); } @@ -105,14 +107,15 @@ class _PhoneVerificationPageState extends State { } } else if (state.status == AuthStatus.error && state.mode == AuthMode.signup) { - final String message = state.errorMessage ?? ''; - if (message.contains('staff profile')) { + final String messageKey = state.errorMessage ?? ''; + // Handle specific business logic errors for signup + if (messageKey == 'errors.auth.account_exists') { final ScaffoldMessengerState messenger = ScaffoldMessenger.of(context); messenger.hideCurrentSnackBar(); messenger.showSnackBar( SnackBar( - content: Text(message), + content: Text(translateErrorKey(messageKey)), duration: const Duration(seconds: 5), ), ); @@ -120,7 +123,7 @@ class _PhoneVerificationPageState extends State { if (!mounted) return; Modular.to.navigate('/'); }); - } else if (message.contains('not authorized')) { + } else if (messageKey == 'errors.auth.unauthorized_app') { Modular.to.pop(); } } diff --git a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/get_started_page/get_started_background.dart b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/get_started_page/get_started_background.dart index a3c0bafa..92c16795 100644 --- a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/get_started_page/get_started_background.dart +++ b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/get_started_page/get_started_background.dart @@ -1,9 +1,16 @@ import 'package:flutter/material.dart'; import 'package:design_system/design_system.dart'; -class GetStartedBackground extends StatelessWidget { +class GetStartedBackground extends StatefulWidget { const GetStartedBackground({super.key}); + @override + State createState() => _GetStartedBackgroundState(); +} + +class _GetStartedBackgroundState extends State { + bool _hasError = false; + @override Widget build(BuildContext context) { return Container( @@ -26,12 +33,48 @@ class GetStartedBackground extends StatelessWidget { ), padding: const EdgeInsets.all(8.0), child: ClipOval( - child: Image.network( - 'https://images.unsplash.com/photo-1577219491135-ce391730fb2c?w=400&h=400&fit=crop&crop=faces', - fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Image.asset(UiImageAssets.logoBlue); - }, + child: Stack( + fit: StackFit.expand, + children: [ + // Layer 1: The Fallback Logo (Always visible until image loads) + Padding( + padding: const EdgeInsets.all(48.0), + child: Image.asset(UiImageAssets.logoBlue), + ), + + // Layer 2: The Network Image (Only visible on success) + if (!_hasError) + Image.network( + 'https://images.unsplash.com/photo-1577219491135-ce391730fb2c?w=400&h=400&fit=crop&crop=faces', + fit: BoxFit.cover, + frameBuilder: (context, child, frame, wasSynchronouslyLoaded) { + if (wasSynchronouslyLoaded) return child; + // Only animate opacity if we have a frame + return AnimatedOpacity( + opacity: frame == null ? 0 : 1, + duration: const Duration(milliseconds: 300), + child: child, + ); + }, + loadingBuilder: (context, child, loadingProgress) { + // While loading, show nothing (transparent) so layer 1 shows + if (loadingProgress == null) return child; + return const SizedBox.shrink(); + }, + errorBuilder: (context, error, stackTrace) { + // On error, show nothing (transparent) so layer 1 shows + // Also schedule a state update to prevent retries if needed + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted && !_hasError) { + setState(() { + _hasError = true; + }); + } + }); + return const SizedBox.shrink(); + }, + ), + ], ), ), ), diff --git a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/otp_verification/otp_input_field.dart b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/otp_verification/otp_input_field.dart index 2eda5bd1..ca756ad0 100644 --- a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/otp_verification/otp_input_field.dart +++ b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/otp_verification/otp_input_field.dart @@ -1,6 +1,7 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:core_localization/core_localization.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../blocs/auth_event.dart'; import '../../../blocs/auth_bloc.dart'; @@ -118,7 +119,10 @@ class _OtpInputFieldState extends State { Padding( padding: const EdgeInsets.only(top: UiConstants.space4), child: Center( - child: Text(widget.error, style: UiTypography.body2r.textError), + child: Text( + translateErrorKey(widget.error), + style: UiTypography.body2r.textError, + ), ), ), ], diff --git a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/phone_input/phone_input_form_field.dart b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/phone_input/phone_input_form_field.dart index dc29e107..e12cd2da 100644 --- a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/phone_input/phone_input_form_field.dart +++ b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/widgets/phone_verification_page/phone_input/phone_input_form_field.dart @@ -1,6 +1,7 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:core_localization/core_localization.dart'; import 'package:staff_authentication/staff_authentication.dart'; /// A widget that displays the phone number input field with country code. @@ -100,7 +101,10 @@ class _PhoneInputFormFieldState extends State { if (widget.error.isNotEmpty) Padding( padding: const EdgeInsets.only(top: UiConstants.space2), - child: Text(widget.error, style: UiTypography.body2r.textError), + child: Text( + translateErrorKey(widget.error), + style: UiTypography.body2r.textError, + ), ), ], ); diff --git a/apps/mobile/packages/features/staff/availability/lib/src/data/repositories_impl/availability_repository_impl.dart b/apps/mobile/packages/features/staff/availability/lib/src/data/repositories_impl/availability_repository_impl.dart index 0de2fce2..ea6e823c 100644 --- a/apps/mobile/packages/features/staff/availability/lib/src/data/repositories_impl/availability_repository_impl.dart +++ b/apps/mobile/packages/features/staff/availability/lib/src/data/repositories_impl/availability_repository_impl.dart @@ -9,7 +9,9 @@ import '../../domain/repositories/availability_repository.dart'; /// Note: The backend schema supports recurring availablity (Weekly/DayOfWeek), /// not specific date availability. Therefore, updating availability for a specific /// date will update the availability for that Day of Week globally (Recurring). -class AvailabilityRepositoryImpl implements AvailabilityRepository { +class AvailabilityRepositoryImpl + with dc.DataErrorHandler + implements AvailabilityRepository { final dc.ExampleConnector _dataConnect; final firebase.FirebaseAuth _firebaseAuth; @@ -21,84 +23,89 @@ class AvailabilityRepositoryImpl implements AvailabilityRepository { Future _getStaffId() async { final firebase.User? user = _firebaseAuth.currentUser; - if (user == null) throw Exception('User not authenticated'); + if (user == null) { + throw NotAuthenticatedException( + technicalMessage: 'User not authenticated'); + } final QueryResult result = await _dataConnect.getStaffByUserId(userId: user.uid).execute(); if (result.data.staffs.isEmpty) { - throw Exception('Staff profile not found'); + throw const ServerException(technicalMessage: 'Staff profile not found'); } return result.data.staffs.first.id; } @override Future> getAvailability(DateTime start, DateTime end) async { - final String staffId = await _getStaffId(); - - // 1. Fetch Weekly recurring availability - final QueryResult result = - await _dataConnect.listStaffAvailabilitiesByStaffId(staffId: staffId).limit(100).execute(); - - final List items = result.data.staffAvailabilities; - - // 2. Map to lookup: DayOfWeek -> Map - final Map> weeklyMap = {}; - - for (final item in items) { - dc.DayOfWeek day; - try { - day = dc.DayOfWeek.values.byName(item.day.stringValue); - } catch (_) { - continue; - } - - dc.AvailabilitySlot slot; - try { - slot = dc.AvailabilitySlot.values.byName(item.slot.stringValue); - } catch (_) { - continue; - } - - bool isAvailable = false; - try { - final dc.AvailabilityStatus status = dc.AvailabilityStatus.values.byName(item.status.stringValue); - isAvailable = _statusToBool(status); - } catch (_) { - isAvailable = false; - } - - if (!weeklyMap.containsKey(day)) { - weeklyMap[day] = {}; - } - weeklyMap[day]![slot] = isAvailable; - } - - // 3. Generate DayAvailability for requested range - final List days = []; - final int dayCount = end.difference(start).inDays; - - for (int i = 0; i <= dayCount; i++) { - final DateTime date = start.add(Duration(days: i)); - final dc.DayOfWeek dow = _toBackendDay(date.weekday); - - final Map daySlots = weeklyMap[dow] ?? {}; + return executeProtected(() async { + final String staffId = await _getStaffId(); - // We define 3 standard slots for every day - final List slots = [ - _createSlot(date, dow, daySlots, dc.AvailabilitySlot.MORNING), - _createSlot(date, dow, daySlots, dc.AvailabilitySlot.AFTERNOON), - _createSlot(date, dow, daySlots, dc.AvailabilitySlot.EVENING), - ]; + // 1. Fetch Weekly recurring availability + final QueryResult result = + await _dataConnect.listStaffAvailabilitiesByStaffId(staffId: staffId).limit(100).execute(); - final bool isDayAvailable = slots.any((s) => s.isAvailable); + final List items = result.data.staffAvailabilities; - days.add(DayAvailability( - date: date, - isAvailable: isDayAvailable, - slots: slots, - )); - } - return days; + // 2. Map to lookup: DayOfWeek -> Map + final Map> weeklyMap = {}; + + for (final item in items) { + dc.DayOfWeek day; + try { + day = dc.DayOfWeek.values.byName(item.day.stringValue); + } catch (_) { + continue; + } + + dc.AvailabilitySlot slot; + try { + slot = dc.AvailabilitySlot.values.byName(item.slot.stringValue); + } catch (_) { + continue; + } + + bool isAvailable = false; + try { + final dc.AvailabilityStatus status = dc.AvailabilityStatus.values.byName(item.status.stringValue); + isAvailable = _statusToBool(status); + } catch (_) { + isAvailable = false; + } + + if (!weeklyMap.containsKey(day)) { + weeklyMap[day] = {}; + } + weeklyMap[day]![slot] = isAvailable; + } + + // 3. Generate DayAvailability for requested range + final List days = []; + final int dayCount = end.difference(start).inDays; + + for (int i = 0; i <= dayCount; i++) { + final DateTime date = start.add(Duration(days: i)); + final dc.DayOfWeek dow = _toBackendDay(date.weekday); + + final Map daySlots = weeklyMap[dow] ?? {}; + + // We define 3 standard slots for every day + final List slots = [ + _createSlot(date, dow, daySlots, dc.AvailabilitySlot.MORNING), + _createSlot(date, dow, daySlots, dc.AvailabilitySlot.AFTERNOON), + _createSlot(date, dow, daySlots, dc.AvailabilitySlot.EVENING), + ]; + + final bool isDayAvailable = slots.any((s) => s.isAvailable); + + days.add(DayAvailability( + date: date, + isAvailable: isDayAvailable, + slots: slots, + )); + } + return days; + }); } AvailabilitySlot _createSlot( @@ -113,75 +120,79 @@ class AvailabilityRepositoryImpl implements AvailabilityRepository { @override Future updateDayAvailability(DayAvailability availability) async { - final String staffId = await _getStaffId(); - final dc.DayOfWeek dow = _toBackendDay(availability.date.weekday); + return executeProtected(() async { + final String staffId = await _getStaffId(); + final dc.DayOfWeek dow = _toBackendDay(availability.date.weekday); - // Update each slot in the backend. - // This updates the recurring rule for this DayOfWeek. - for (final AvailabilitySlot slot in availability.slots) { - final dc.AvailabilitySlot slotEnum = _toBackendSlot(slot.id); - final dc.AvailabilityStatus status = _boolToStatus(slot.isAvailable); + // Update each slot in the backend. + // This updates the recurring rule for this DayOfWeek. + for (final AvailabilitySlot slot in availability.slots) { + final dc.AvailabilitySlot slotEnum = _toBackendSlot(slot.id); + final dc.AvailabilityStatus status = _boolToStatus(slot.isAvailable); - await _upsertSlot(staffId, dow, slotEnum, status); - } + await _upsertSlot(staffId, dow, slotEnum, status); + } - return availability; + return availability; + }); } @override Future> applyQuickSet(DateTime start, DateTime end, String type) async { - final String staffId = await _getStaffId(); - - // QuickSet updates the Recurring schedule for all days involved. - // However, if the user selects a range that covers e.g. Mon-Fri, we update Mon-Fri. - - final int dayCount = end.difference(start).inDays; - final Set processedDays = {}; - final List resultDays = []; + return executeProtected(() async { + final String staffId = await _getStaffId(); + + // QuickSet updates the Recurring schedule for all days involved. + // However, if the user selects a range that covers e.g. Mon-Fri, we update Mon-Fri. + + final int dayCount = end.difference(start).inDays; + final Set processedDays = {}; + final List resultDays = []; - for (int i = 0; i <= dayCount; i++) { - final DateTime date = start.add(Duration(days: i)); - final dc.DayOfWeek dow = _toBackendDay(date.weekday); - - // Logic to determine if enabled based on type - bool enableDay = false; - if (type == 'all') enableDay = true; - else if (type == 'clear') enableDay = false; - else if (type == 'weekdays') { - enableDay = (dow != dc.DayOfWeek.SATURDAY && dow != dc.DayOfWeek.SUNDAY); - } else if (type == 'weekends') { - enableDay = (dow == dc.DayOfWeek.SATURDAY || dow == dc.DayOfWeek.SUNDAY); - } + for (int i = 0; i <= dayCount; i++) { + final DateTime date = start.add(Duration(days: i)); + final dc.DayOfWeek dow = _toBackendDay(date.weekday); + + // Logic to determine if enabled based on type + bool enableDay = false; + if (type == 'all') enableDay = true; + else if (type == 'clear') enableDay = false; + else if (type == 'weekdays') { + enableDay = (dow != dc.DayOfWeek.SATURDAY && dow != dc.DayOfWeek.SUNDAY); + } else if (type == 'weekends') { + enableDay = (dow == dc.DayOfWeek.SATURDAY || dow == dc.DayOfWeek.SUNDAY); + } - // Only update backend once per DayOfWeek (since it's recurring) - // to avoid redundant calls if range > 1 week. - if (!processedDays.contains(dow)) { - processedDays.add(dow); - - final dc.AvailabilityStatus status = _boolToStatus(enableDay); - - await Future.wait([ - _upsertSlot(staffId, dow, dc.AvailabilitySlot.MORNING, status), - _upsertSlot(staffId, dow, dc.AvailabilitySlot.AFTERNOON, status), - _upsertSlot(staffId, dow, dc.AvailabilitySlot.EVENING, status), - ]); - } - - // Prepare return object - final slots = [ - AvailabilityAdapter.fromPrimitive('MORNING', isAvailable: enableDay), - AvailabilityAdapter.fromPrimitive('AFTERNOON', isAvailable: enableDay), - AvailabilityAdapter.fromPrimitive('EVENING', isAvailable: enableDay), - ]; + // Only update backend once per DayOfWeek (since it's recurring) + // to avoid redundant calls if range > 1 week. + if (!processedDays.contains(dow)) { + processedDays.add(dow); + + final dc.AvailabilityStatus status = _boolToStatus(enableDay); + + await Future.wait([ + _upsertSlot(staffId, dow, dc.AvailabilitySlot.MORNING, status), + _upsertSlot(staffId, dow, dc.AvailabilitySlot.AFTERNOON, status), + _upsertSlot(staffId, dow, dc.AvailabilitySlot.EVENING, status), + ]); + } + + // Prepare return object + final slots = [ + AvailabilityAdapter.fromPrimitive('MORNING', isAvailable: enableDay), + AvailabilityAdapter.fromPrimitive('AFTERNOON', isAvailable: enableDay), + AvailabilityAdapter.fromPrimitive('EVENING', isAvailable: enableDay), + ]; - resultDays.add(DayAvailability( - date: date, - isAvailable: enableDay, - slots: slots, - )); - } + resultDays.add(DayAvailability( + date: date, + isAvailable: enableDay, + slots: slots, + )); + } - return resultDays; + return resultDays; + }); } Future _upsertSlot(String staffId, dc.DayOfWeek day, dc.AvailabilitySlot slot, dc.AvailabilityStatus status) async { diff --git a/apps/mobile/packages/features/staff/availability/lib/src/presentation/pages/availability_page.dart b/apps/mobile/packages/features/staff/availability/lib/src/presentation/pages/availability_page.dart index 91fc33ee..03ea6b07 100644 --- a/apps/mobile/packages/features/staff/availability/lib/src/presentation/pages/availability_page.dart +++ b/apps/mobile/packages/features/staff/availability/lib/src/presentation/pages/availability_page.dart @@ -1,3 +1,4 @@ +import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -41,6 +42,7 @@ class _AvailabilityPageState extends State { @override Widget build(BuildContext context) { + Translations.of(context); return BlocProvider.value( value: _bloc, child: Scaffold( @@ -61,6 +63,14 @@ class _AvailabilityPageState extends State { behavior: SnackBarBehavior.floating, ), ); + } else if (state is AvailabilityError) { + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(translateErrorKey(state.message)), + behavior: SnackBarBehavior.floating, + ), + ); } }, child: BlocBuilder( @@ -105,7 +115,24 @@ class _AvailabilityPageState extends State { ], ); } else if (state is AvailabilityError) { - return Center(child: Text('Error: ${state.message}')); + return Center( + child: Padding( + padding: const EdgeInsets.all(24.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + translateErrorKey(state.message), + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 16, + color: AppColors.krowMuted, + ), + ), + ], + ), + ), + ); } return const SizedBox.shrink(); }, diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/pages/clock_in_page.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/pages/clock_in_page.dart index bd389ab6..6240ad4a 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/pages/clock_in_page.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/pages/clock_in_page.dart @@ -1,3 +1,4 @@ +import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -41,7 +42,9 @@ class _ClockInPageState extends State { state.errorMessage != null) { ScaffoldMessenger.of( context, - ).showSnackBar(SnackBar(content: Text(state.errorMessage!))); + ).showSnackBar( + SnackBar(content: Text(translateErrorKey(state.errorMessage!))), + ); } }, builder: (BuildContext context, ClockInState state) { diff --git a/apps/mobile/packages/features/staff/home/lib/src/presentation/pages/worker_home_page.dart b/apps/mobile/packages/features/staff/home/lib/src/presentation/pages/worker_home_page.dart index eb4a01cf..4919bd11 100644 --- a/apps/mobile/packages/features/staff/home/lib/src/presentation/pages/worker_home_page.dart +++ b/apps/mobile/packages/features/staff/home/lib/src/presentation/pages/worker_home_page.dart @@ -32,6 +32,7 @@ class WorkerHomePage extends StatelessWidget { @override Widget build(BuildContext context) { + final t = Translations.of(context); final i18n = t.staff.home; final bannersI18n = i18n.banners; final quickI18n = i18n.quick_actions; diff --git a/apps/mobile/packages/features/staff/payments/lib/src/data/repositories/payments_repository_impl.dart b/apps/mobile/packages/features/staff/payments/lib/src/data/repositories/payments_repository_impl.dart index 25cdd03f..a0791ab5 100644 --- a/apps/mobile/packages/features/staff/payments/lib/src/data/repositories/payments_repository_impl.dart +++ b/apps/mobile/packages/features/staff/payments/lib/src/data/repositories/payments_repository_impl.dart @@ -6,7 +6,9 @@ import 'package:firebase_auth/firebase_auth.dart' as firebase_auth; import 'package:krow_core/core.dart'; import '../../domain/repositories/payments_repository.dart'; -class PaymentsRepositoryImpl implements PaymentsRepository { +class PaymentsRepositoryImpl + with dc.DataErrorHandler + implements PaymentsRepository { PaymentsRepositoryImpl() : _dataConnect = dc.ExampleConnector.instance; final dc.ExampleConnector _dataConnect; @@ -27,17 +29,18 @@ class PaymentsRepositoryImpl implements PaymentsRepository { // 3. Fetch from Data Connect using Firebase UID final firebase_auth.User? user = _auth.currentUser; if (user == null) { - throw Exception('User is not authenticated'); + throw const NotAuthenticatedException( + technicalMessage: 'User is not authenticated', + ); } - try { - final QueryResult response = await _dataConnect.getStaffByUserId(userId: user.uid).execute(); - if (response.data.staffs.isNotEmpty) { - _cachedStaffId = response.data.staffs.first.id; - return _cachedStaffId!; - } - } catch (e) { - // Log or handle error + // This call is protected by parent execution context if called within executeProtected, + // otherwise we might need to wrap it if called standalone. + // For now we assume it's called from public methods which are protected. + final QueryResult response = await _dataConnect.getStaffByUserId(userId: user.uid).execute(); + if (response.data.staffs.isNotEmpty) { + _cachedStaffId = response.data.staffs.first.id; + return _cachedStaffId!; } // 4. Fallback @@ -78,55 +81,57 @@ class PaymentsRepositoryImpl implements PaymentsRepository { @override Future getPaymentSummary() async { - final String currentStaffId = await _getStaffId(); + return executeProtected(() async { + final String currentStaffId = await _getStaffId(); - // Fetch recent payments with a limit - // Note: limit is chained on the query builder - final QueryResult result = - await _dataConnect.listRecentPaymentsByStaffId( - staffId: currentStaffId, - ).limit(100).execute(); + // Fetch recent payments with a limit + // Note: limit is chained on the query builder + final QueryResult result = + await _dataConnect.listRecentPaymentsByStaffId( + staffId: currentStaffId, + ).limit(100).execute(); - final List payments = result.data.recentPayments; + final List payments = result.data.recentPayments; - double weekly = 0; - double monthly = 0; - double pending = 0; - double total = 0; + double weekly = 0; + double monthly = 0; + double pending = 0; + double total = 0; - final DateTime now = DateTime.now(); - final DateTime startOfWeek = now.subtract(const Duration(days: 7)); - final DateTime startOfMonth = DateTime(now.year, now.month, 1); + final DateTime now = DateTime.now(); + final DateTime startOfWeek = now.subtract(const Duration(days: 7)); + final DateTime startOfMonth = DateTime(now.year, now.month, 1); - for (final dc.ListRecentPaymentsByStaffIdRecentPayments p in payments) { - final DateTime? date = _toDateTime(p.invoice.issueDate) ?? _toDateTime(p.createdAt); - final double amount = p.invoice.amount; - final String? status = p.status?.stringValue; + for (final dc.ListRecentPaymentsByStaffIdRecentPayments p in payments) { + final DateTime? date = _toDateTime(p.invoice.issueDate) ?? _toDateTime(p.createdAt); + final double amount = p.invoice.amount; + final String? status = p.status?.stringValue; - if (status == 'PENDING') { - pending += amount; - } else if (status == 'PAID') { - total += amount; - if (date != null) { - if (date.isAfter(startOfWeek)) weekly += amount; - if (date.isAfter(startOfMonth)) monthly += amount; - } - } - } + if (status == 'PENDING') { + pending += amount; + } else if (status == 'PAID') { + total += amount; + if (date != null) { + if (date.isAfter(startOfWeek)) weekly += amount; + if (date.isAfter(startOfMonth)) monthly += amount; + } + } + } - return PaymentSummary( - weeklyEarnings: weekly, - monthlyEarnings: monthly, - pendingEarnings: pending, - totalEarnings: total, - ); + return PaymentSummary( + weeklyEarnings: weekly, + monthlyEarnings: monthly, + pendingEarnings: pending, + totalEarnings: total, + ); + }); } @override Future> getPaymentHistory(String period) async { - final String currentStaffId = await _getStaffId(); - - try { + return executeProtected(() async { + final String currentStaffId = await _getStaffId(); + final QueryResult response = await _dataConnect .listRecentPaymentsByStaffId(staffId: currentStaffId) @@ -142,9 +147,7 @@ class PaymentsRepositoryImpl implements PaymentsRepository { paidAt: _toDateTime(payment.invoice.issueDate), ); }).toList(); - } catch (e) { - return []; - } + }); } } diff --git a/apps/mobile/packages/features/staff/payments/lib/src/presentation/pages/payments_page.dart b/apps/mobile/packages/features/staff/payments/lib/src/presentation/pages/payments_page.dart index d8c16d86..29b374e1 100644 --- a/apps/mobile/packages/features/staff/payments/lib/src/presentation/pages/payments_page.dart +++ b/apps/mobile/packages/features/staff/payments/lib/src/presentation/pages/payments_page.dart @@ -4,6 +4,7 @@ import 'package:flutter_modular/flutter_modular.dart'; import 'package:lucide_icons/lucide_icons.dart'; import 'package:intl/intl.dart'; import 'package:krow_domain/krow_domain.dart'; +import 'package:core_localization/core_localization.dart'; import '../blocs/payments/payments_bloc.dart'; import '../blocs/payments/payments_event.dart'; import '../blocs/payments/payments_state.dart'; @@ -30,16 +31,37 @@ class _PaymentsPageState extends State { @override Widget build(BuildContext context) { + Translations.of(context); return BlocProvider.value( value: _bloc, child: Scaffold( backgroundColor: const Color(0xFFF8FAFC), - body: BlocBuilder( + body: BlocConsumer( + listener: (context, state) { + if (state is PaymentsError) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(translateErrorKey(state.message)), + behavior: SnackBarBehavior.floating, + ), + ); + } + }, builder: (BuildContext context, PaymentsState state) { if (state is PaymentsLoading) { return const Center(child: CircularProgressIndicator()); + } else if (state is PaymentsError) { - return Center(child: Text('Error: ${state.message}')); + return Center( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + translateErrorKey(state.message), + textAlign: TextAlign.center, + style: const TextStyle(color: Color(0xFF64748B)), // TextSecondary + ), + ), + ); } else if (state is PaymentsLoaded) { return _buildContent(context, state); } diff --git a/apps/mobile/packages/features/staff/profile/lib/src/data/repositories/profile_repository_impl.dart b/apps/mobile/packages/features/staff/profile/lib/src/data/repositories/profile_repository_impl.dart index c6d2e792..32bbcec5 100644 --- a/apps/mobile/packages/features/staff/profile/lib/src/data/repositories/profile_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile/lib/src/data/repositories/profile_repository_impl.dart @@ -14,7 +14,9 @@ import '../../domain/repositories/profile_repository.dart'; /// /// Currently uses [ProfileRepositoryMock] from data_connect. /// When Firebase Data Connect is ready, this will be swapped with a real implementation. -class ProfileRepositoryImpl implements ProfileRepositoryInterface { +class ProfileRepositoryImpl + with DataErrorHandler + implements ProfileRepositoryInterface { /// Creates a [ProfileRepositoryImpl]. /// /// Requires a [ExampleConnector] from the data_connect package and [FirebaseAuth]. @@ -31,37 +33,39 @@ class ProfileRepositoryImpl implements ProfileRepositoryInterface { @override Future getStaffProfile() async { - final user = firebaseAuth.currentUser; - if (user == null) { - throw Exception('User not authenticated'); - } + return executeProtected(() async { + final user = firebaseAuth.currentUser; + if (user == null) { + throw NotAuthenticatedException( + technicalMessage: 'User not authenticated'); + } - final response = await connector.getStaffByUserId(userId: user.uid).execute(); - - if (response.data.staffs.isEmpty) { - // TODO: Handle user not found properly with domain exception - throw Exception('Staff not found'); - } + final response = await connector.getStaffByUserId(userId: user.uid).execute(); + + if (response.data.staffs.isEmpty) { + throw const ServerException(technicalMessage: 'Staff not found'); + } - final GetStaffByUserIdStaffs rawStaff = response.data.staffs.first; + final GetStaffByUserIdStaffs rawStaff = response.data.staffs.first; - // Map the raw data connect object to the Domain Entity - return Staff( - id: rawStaff.id, - authProviderId: rawStaff.userId, - name: rawStaff.fullName, - email: rawStaff.email ?? '', - phone: rawStaff.phone, - avatar: rawStaff.photoUrl, - status: StaffStatus.active, - address: rawStaff.addres, - totalShifts: rawStaff.totalShifts, - averageRating: rawStaff.averageRating, - onTimeRate: rawStaff.onTimeRate, - noShowCount: rawStaff.noShowCount, - cancellationCount: rawStaff.cancellationCount, - reliabilityScore: rawStaff.reliabilityScore, - ); + // Map the raw data connect object to the Domain Entity + return Staff( + id: rawStaff.id, + authProviderId: rawStaff.userId, + name: rawStaff.fullName, + email: rawStaff.email ?? '', + phone: rawStaff.phone, + avatar: rawStaff.photoUrl, + status: StaffStatus.active, + address: rawStaff.addres, + totalShifts: rawStaff.totalShifts, + averageRating: rawStaff.averageRating, + onTimeRate: rawStaff.onTimeRate, + noShowCount: rawStaff.noShowCount, + cancellationCount: rawStaff.cancellationCount, + reliabilityScore: rawStaff.reliabilityScore, + ); + }); } @override diff --git a/apps/mobile/packages/features/staff/profile/lib/src/presentation/pages/staff_profile_page.dart b/apps/mobile/packages/features/staff/profile/lib/src/presentation/pages/staff_profile_page.dart index c92e8a11..afae7d83 100644 --- a/apps/mobile/packages/features/staff/profile/lib/src/presentation/pages/staff_profile_page.dart +++ b/apps/mobile/packages/features/staff/profile/lib/src/presentation/pages/staff_profile_page.dart @@ -50,7 +50,7 @@ class StaffProfilePage extends StatelessWidget { @override Widget build(BuildContext context) { - final TranslationsStaffProfileEn i18n = t.staff.profile; + final i18n = Translations.of(context).staff.profile; final ProfileCubit cubit = Modular.get(); // Load profile data on first build @@ -64,6 +64,14 @@ class StaffProfilePage extends StatelessWidget { listener: (context, state) { if (state.status == ProfileStatus.signedOut) { Modular.to.toGetStarted(); + } else if (state.status == ProfileStatus.error && + state.errorMessage != null) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(translateErrorKey(state.errorMessage!)), + behavior: SnackBarBehavior.floating, + ), + ); } }, builder: (context, state) { @@ -74,10 +82,16 @@ class StaffProfilePage extends StatelessWidget { if (state.status == ProfileStatus.error) { return Center( - child: Text( - state.errorMessage ?? 'An error occurred', - style: UiTypography.body1r.copyWith( - color: UiColors.destructive, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'An error occurred', + textAlign: TextAlign.center, + style: UiTypography.body1r.copyWith( + color: UiColors.textSecondary, + ), ), ), ); diff --git a/apps/mobile/packages/features/staff/profile/lib/src/presentation/widgets/language_selector_bottom_sheet.dart b/apps/mobile/packages/features/staff/profile/lib/src/presentation/widgets/language_selector_bottom_sheet.dart index 057a17c9..d703b41b 100644 --- a/apps/mobile/packages/features/staff/profile/lib/src/presentation/widgets/language_selector_bottom_sheet.dart +++ b/apps/mobile/packages/features/staff/profile/lib/src/presentation/widgets/language_selector_bottom_sheet.dart @@ -20,29 +20,31 @@ class LanguageSelectorBottomSheet extends StatelessWidget { color: UiColors.background, borderRadius: BorderRadius.vertical(top: Radius.circular(UiConstants.radiusBase)), ), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Text( - t.settings.change_language, - style: UiTypography.headline4m, - textAlign: TextAlign.center, - ), - SizedBox(height: UiConstants.space6), - _buildLanguageOption( - context, - label: 'English', - locale: AppLocale.en, - ), - SizedBox(height: UiConstants.space4), - _buildLanguageOption( - context, - label: 'Español', - locale: AppLocale.es, - ), - SizedBox(height: UiConstants.space6), - ], + child: SafeArea( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text( + t.settings.change_language, + style: UiTypography.headline4m, + textAlign: TextAlign.center, + ), + SizedBox(height: UiConstants.space6), + _buildLanguageOption( + context, + label: 'English', + locale: AppLocale.en, + ), + SizedBox(height: UiConstants.space4), + _buildLanguageOption( + context, + label: 'Español', + locale: AppLocale.es, + ), + SizedBox(height: UiConstants.space6), + ], + ), ), ); } diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/data/repositories_impl/certificates_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/data/repositories_impl/certificates_repository_impl.dart index 90c40c0e..411ce9b5 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/data/repositories_impl/certificates_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/data/repositories_impl/certificates_repository_impl.dart @@ -10,7 +10,9 @@ import '../../domain/repositories/certificates_repository.dart'; /// /// This class handles the communication with the backend via [ExampleConnector]. /// It maps raw generated data types to clean [domain.StaffDocument] entities. -class CertificatesRepositoryImpl implements CertificatesRepository { +class CertificatesRepositoryImpl + with DataErrorHandler + implements CertificatesRepository { /// The generated Data Connect SDK client. final ExampleConnector _dataConnect; @@ -24,16 +26,17 @@ class CertificatesRepositoryImpl implements CertificatesRepository { required ExampleConnector dataConnect, required FirebaseAuth firebaseAuth, }) : _dataConnect = dataConnect, - _firebaseAuth = firebaseAuth; + _firebaseAuth = firebaseAuth; @override Future> getCertificates() async { - final User? currentUser = _firebaseAuth.currentUser; - if (currentUser == null) { - throw Exception('User not authenticated'); - } + return executeProtected(() async { + final User? currentUser = _firebaseAuth.currentUser; + if (currentUser == null) { + throw domain.NotAuthenticatedException( + technicalMessage: 'User not authenticated'); + } - try { // Execute the query via DataConnect generated SDK final QueryResult result = @@ -46,10 +49,7 @@ class CertificatesRepositoryImpl implements CertificatesRepository { .map((ListStaffDocumentsByStaffIdStaffDocuments doc) => _mapToDomain(doc)) .toList(); - } catch (e) { - // In a real app, we would map specific exceptions to domain Failures here. - throw Exception('Failed to fetch certificates: $e'); - } + }); } /// Maps the Data Connect [ListStaffDocumentsByStaffIdStaffDocuments] to a domain [domain.StaffDocument]. diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/pages/certificates_page.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/pages/certificates_page.dart index f9ac8f85..c90355e0 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/pages/certificates_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/certificates/lib/src/presentation/pages/certificates_page.dart @@ -35,7 +35,19 @@ class CertificatesPage extends StatelessWidget { if (state.status == CertificatesStatus.failure) { return Scaffold( - body: Center(child: Text('Error: ${state.errorMessage}')), + appBar: AppBar(title: const Text('Certificates')), + body: Center( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'Error loading certificates', + textAlign: TextAlign.center, + style: const TextStyle(color: UiColors.textSecondary), + ), + ), + ), ); } diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/data/repositories_impl/documents_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/data/repositories_impl/documents_repository_impl.dart index 08d6014b..2a82c255 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/data/repositories_impl/documents_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/data/repositories_impl/documents_repository_impl.dart @@ -7,7 +7,9 @@ import 'package:krow_core/core.dart'; import '../../domain/repositories/documents_repository.dart'; /// Implementation of [DocumentsRepository] using Data Connect. -class DocumentsRepositoryImpl implements DocumentsRepository { +class DocumentsRepositoryImpl + with DataErrorHandler + implements DocumentsRepository { final ExampleConnector _dataConnect; final FirebaseAuth _firebaseAuth; @@ -19,10 +21,12 @@ class DocumentsRepositoryImpl implements DocumentsRepository { @override Future> getDocuments() async { - final User? currentUser = _firebaseAuth.currentUser; - if (currentUser == null) { - throw Exception('User not authenticated'); - } + return executeProtected(() async { + final User? currentUser = _firebaseAuth.currentUser; + if (currentUser == null) { + throw domain.NotAuthenticatedException( + technicalMessage: 'User not authenticated'); + } /// MOCK IMPLEMENTATION /// To be replaced with real data connect query when available @@ -49,22 +53,7 @@ class DocumentsRepositoryImpl implements DocumentsRepository { ), ]; - /* - try { - final QueryResult result = - await _dataConnect - .listStaffDocumentsByStaffId(staffId: currentUser.uid) - .execute(); - - return result.data.staffDocuments - .map((ListStaffDocumentsByStaffIdStaffDocuments doc) => - _mapToDomain(doc)) - .toList(); - } catch (e) { - throw Exception('Failed to fetch documents: $e'); - } - */ + }); } domain.StaffDocument _mapToDomain( diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/pages/documents_page.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/pages/documents_page.dart index fb2e6526..af62abf7 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/pages/documents_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/pages/documents_page.dart @@ -52,11 +52,17 @@ class DocumentsPage extends StatelessWidget { } if (state.status == DocumentsStatus.failure) { return Center( - child: Text( - t.staff_documents.list.error( - message: state.errorMessage ?? 'Unknown', + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + state.errorMessage != null + ? (state.errorMessage!.contains('errors.') + ? translateErrorKey(state.errorMessage!) + : t.staff_documents.list.error(message: state.errorMessage!)) + : t.staff_documents.list.error(message: 'Unknown'), + textAlign: TextAlign.center, + style: UiTypography.body1m.copyWith(color: UiColors.textSecondary), ), - style: UiTypography.body1m.copyWith(color: UiColors.textError), ), ); } diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/data/repositories/tax_forms_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/data/repositories/tax_forms_repository_impl.dart index 7307c194..be9a1cc0 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/data/repositories/tax_forms_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/data/repositories/tax_forms_repository_impl.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:firebase_auth/firebase_auth.dart' as auth; +import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_data_connect/firebase_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart' as dc; import 'package:krow_domain/krow_domain.dart'; @@ -8,7 +9,9 @@ import 'package:krow_domain/krow_domain.dart'; import '../../domain/repositories/tax_forms_repository.dart'; import '../mappers/tax_form_mapper.dart'; -class TaxFormsRepositoryImpl implements TaxFormsRepository { +class TaxFormsRepositoryImpl + with dc.DataErrorHandler + implements TaxFormsRepository { TaxFormsRepositoryImpl({ required this.firebaseAuth, required this.dataConnect, @@ -21,46 +24,58 @@ class TaxFormsRepositoryImpl implements TaxFormsRepository { String _getStaffId() { final auth.User? user = firebaseAuth.currentUser; if (user == null) { - throw Exception('User not authenticated'); + throw const NotAuthenticatedException( + technicalMessage: 'Firebase User is null', + ); } - + final String? staffId = dc.StaffSessionStore.instance.session?.staff?.id; if (staffId == null || staffId.isEmpty) { - throw Exception('Staff profile is missing or session not initialized.'); + throw const StaffProfileNotFoundException( + technicalMessage: 'Staff ID missing in SessionStore', + ); } return staffId; } @override Future> getTaxForms() async { - final String staffId = _getStaffId(); - final QueryResult - result = - await dataConnect.getTaxFormsByStaffId(staffId: staffId).execute(); - - final List forms = result.data.taxForms.map(TaxFormMapper.fromDataConnect).toList(); - - // Check if required forms exist, create if not. - final Set typesPresent = forms.map((TaxForm f) => f.type).toSet(); - bool createdNew = false; - - if (!typesPresent.contains(TaxFormType.i9)) { - await _createInitialForm(staffId, TaxFormType.i9); - createdNew = true; - } - if (!typesPresent.contains(TaxFormType.w4)) { - await _createInitialForm(staffId, TaxFormType.w4); - createdNew = true; - } - - if (createdNew) { + return executeProtected(() async { + final String staffId = _getStaffId(); final QueryResult - result2 = - await dataConnect.getTaxFormsByStaffId(staffId: staffId).execute(); - return result2.data.taxForms.map(TaxFormMapper.fromDataConnect).toList(); - } + result = await dataConnect + .getTaxFormsByStaffId(staffId: staffId) + .execute(); - return forms; + final List forms = + result.data.taxForms.map(TaxFormMapper.fromDataConnect).toList(); + + // Check if required forms exist, create if not. + final Set typesPresent = + forms.map((TaxForm f) => f.type).toSet(); + bool createdNew = false; + + if (!typesPresent.contains(TaxFormType.i9)) { + await _createInitialForm(staffId, TaxFormType.i9); + createdNew = true; + } + if (!typesPresent.contains(TaxFormType.w4)) { + await _createInitialForm(staffId, TaxFormType.w4); + createdNew = true; + } + + if (createdNew) { + final QueryResult< + dc.GetTaxFormsByStaffIdData, + dc.GetTaxFormsByStaffIdVariables> result2 = + await dataConnect.getTaxFormsByStaffId(staffId: staffId).execute(); + return result2.data.taxForms + .map(TaxFormMapper.fromDataConnect) + .toList(); + } + + return forms; + }); } Future _createInitialForm(String staffId, TaxFormType type) async { @@ -80,45 +95,62 @@ class TaxFormsRepositoryImpl implements TaxFormsRepository { @override Future updateI9Form(I9TaxForm form) async { - final Map data = form.formData; - final dc.UpdateTaxFormVariablesBuilder builder = dataConnect.updateTaxForm(id: form.id); - _mapCommonFields(builder, data); - _mapI9Fields(builder, data); - await builder.execute(); + return executeProtected(() async { + final Map data = form.formData; + final dc.UpdateTaxFormVariablesBuilder builder = + dataConnect.updateTaxForm(id: form.id); + _mapCommonFields(builder, data); + _mapI9Fields(builder, data); + await builder.execute(); + }); } @override Future submitI9Form(I9TaxForm form) async { - final Map data = form.formData; - final dc.UpdateTaxFormVariablesBuilder builder = dataConnect.updateTaxForm(id: form.id); - _mapCommonFields(builder, data); - _mapI9Fields(builder, data); - await builder.status(dc.TaxFormStatus.SUBMITTED).execute(); + return executeProtected(() async { + final Map data = form.formData; + final dc.UpdateTaxFormVariablesBuilder builder = + dataConnect.updateTaxForm(id: form.id); + _mapCommonFields(builder, data); + _mapI9Fields(builder, data); + await builder.status(dc.TaxFormStatus.SUBMITTED).execute(); + }); } @override Future updateW4Form(W4TaxForm form) async { - final Map data = form.formData; - final dc.UpdateTaxFormVariablesBuilder builder = dataConnect.updateTaxForm(id: form.id); - _mapCommonFields(builder, data); - _mapW4Fields(builder, data); - await builder.execute(); + return executeProtected(() async { + final Map data = form.formData; + final dc.UpdateTaxFormVariablesBuilder builder = + dataConnect.updateTaxForm(id: form.id); + _mapCommonFields(builder, data); + _mapW4Fields(builder, data); + await builder.execute(); + }); } @override Future submitW4Form(W4TaxForm form) async { - final Map data = form.formData; - final dc.UpdateTaxFormVariablesBuilder builder = dataConnect.updateTaxForm(id: form.id); - _mapCommonFields(builder, data); - _mapW4Fields(builder, data); - await builder.status(dc.TaxFormStatus.SUBMITTED).execute(); + return executeProtected(() async { + final Map data = form.formData; + final dc.UpdateTaxFormVariablesBuilder builder = + dataConnect.updateTaxForm(id: form.id); + _mapCommonFields(builder, data); + _mapW4Fields(builder, data); + await builder.status(dc.TaxFormStatus.SUBMITTED).execute(); + }); } - void _mapCommonFields(dc.UpdateTaxFormVariablesBuilder builder, Map data) { - if (data.containsKey('firstName')) builder.firstName(data['firstName'] as String?); - if (data.containsKey('lastName')) builder.lastName(data['lastName'] as String?); - if (data.containsKey('middleInitial')) builder.mInitial(data['middleInitial'] as String?); - if (data.containsKey('otherLastNames')) builder.oLastName(data['otherLastNames'] as String?); + void _mapCommonFields( + dc.UpdateTaxFormVariablesBuilder builder, Map data) { + if (data.containsKey('firstName')) + builder.firstName(data['firstName'] as String?); + if (data.containsKey('lastName')) + builder.lastName(data['lastName'] as String?); + if (data.containsKey('middleInitial')) + builder.mInitial(data['middleInitial'] as String?); + if (data.containsKey('otherLastNames')) + builder.oLastName(data['otherLastNames'] as String?); if (data.containsKey('dob')) { final String dob = data['dob'] as String; // Handle both ISO string and MM/dd/yyyy manual entry @@ -131,8 +163,8 @@ class TaxFormsRepositoryImpl implements TaxFormsRepository { final List parts = dob.split('/'); if (parts.length == 3) { date = DateTime( - int.parse(parts[2]), - int.parse(parts[0]), + int.parse(parts[2]), + int.parse(parts[0]), int.parse(parts[1]), ); } @@ -145,70 +177,90 @@ class TaxFormsRepositoryImpl implements TaxFormsRepository { } } if (data.containsKey('ssn') && data['ssn']?.toString().isNotEmpty == true) { - builder.socialSN(int.tryParse(data['ssn'].toString().replaceAll(RegExp(r'\D'), '')) ?? 0); + builder.socialSN( + int.tryParse(data['ssn'].toString().replaceAll(RegExp(r'\D'), '')) ?? + 0); } if (data.containsKey('email')) builder.email(data['email'] as String?); if (data.containsKey('phone')) builder.phone(data['phone'] as String?); - if (data.containsKey('address')) builder.address(data['address'] as String?); - if (data.containsKey('aptNumber')) builder.apt(data['aptNumber'] as String?); + if (data.containsKey('address')) + builder.address(data['address'] as String?); + if (data.containsKey('aptNumber')) + builder.apt(data['aptNumber'] as String?); if (data.containsKey('city')) builder.city(data['city'] as String?); if (data.containsKey('state')) builder.state(data['state'] as String?); - if (data.containsKey('zipCode')) builder.zipCode(data['zipCode'] as String?); + if (data.containsKey('zipCode')) + builder.zipCode(data['zipCode'] as String?); } - void _mapI9Fields(dc.UpdateTaxFormVariablesBuilder builder, Map data) { + void _mapI9Fields( + dc.UpdateTaxFormVariablesBuilder builder, Map data) { if (data.containsKey('citizenshipStatus')) { final String status = data['citizenshipStatus'] as String; // Map string to enum if possible, or handle otherwise. // Generated enum: CITIZEN, NONCITIZEN_NATIONAL, PERMANENT_RESIDENT, ALIEN_AUTHORIZED try { - builder.citizen(dc.CitizenshipStatus.values.byName(status.toUpperCase())); + builder.citizen( + dc.CitizenshipStatus.values.byName(status.toUpperCase())); } catch (_) {} } - if (data.containsKey('uscisNumber')) builder.uscis(data['uscisNumber'] as String?); - if (data.containsKey('passportNumber')) builder.passportNumber(data['passportNumber'] as String?); - if (data.containsKey('countryIssuance')) builder.countryIssue(data['countryIssuance'] as String?); - if (data.containsKey('preparerUsed')) builder.prepartorOrTranslator(data['preparerUsed'] as bool?); - if (data.containsKey('signature')) builder.signature(data['signature'] as String?); + if (data.containsKey('uscisNumber')) + builder.uscis(data['uscisNumber'] as String?); + if (data.containsKey('passportNumber')) + builder.passportNumber(data['passportNumber'] as String?); + if (data.containsKey('countryIssuance')) + builder.countryIssue(data['countryIssuance'] as String?); + if (data.containsKey('preparerUsed')) + builder.prepartorOrTranslator(data['preparerUsed'] as bool?); + if (data.containsKey('signature')) + builder.signature(data['signature'] as String?); // Note: admissionNumber not in builder based on file read } - void _mapW4Fields(dc.UpdateTaxFormVariablesBuilder builder, Map data) { + void _mapW4Fields( + dc.UpdateTaxFormVariablesBuilder builder, Map data) { if (data.containsKey('cityStateZip')) { - final String csz = data['cityStateZip'] as String; - // Extremely basic split: City, State Zip - final List parts = csz.split(','); - if (parts.length >= 2) { - builder.city(parts[0].trim()); - final String stateZip = parts[1].trim(); - final List szParts = stateZip.split(' '); - if (szParts.isNotEmpty) builder.state(szParts[0]); - if (szParts.length > 1) builder.zipCode(szParts.last); - } + final String csz = data['cityStateZip'] as String; + // Extremely basic split: City, State Zip + final List parts = csz.split(','); + if (parts.length >= 2) { + builder.city(parts[0].trim()); + final String stateZip = parts[1].trim(); + final List szParts = stateZip.split(' '); + if (szParts.isNotEmpty) builder.state(szParts[0]); + if (szParts.length > 1) builder.zipCode(szParts.last); + } } if (data.containsKey('filingStatus')) { // MARITIAL_STATUS_SINGLE, MARITIAL_STATUS_MARRIED, MARITIAL_STATUS_HEAD - try { - final String status = data['filingStatus'] as String; - // Simple mapping assumptions: - if (status.contains('single')) builder.marital(dc.MaritalStatus.SINGLE); - else if (status.contains('married')) builder.marital(dc.MaritalStatus.MARRIED); - else if (status.contains('head')) builder.marital(dc.MaritalStatus.HEAD); - } catch (_) {} + try { + final String status = data['filingStatus'] as String; + // Simple mapping assumptions: + if (status.contains('single')) builder.marital(dc.MaritalStatus.SINGLE); + else if (status.contains('married')) + builder.marital(dc.MaritalStatus.MARRIED); + else if (status.contains('head')) + builder.marital(dc.MaritalStatus.HEAD); + } catch (_) {} } - if (data.containsKey('multipleJobs')) builder.multipleJob(data['multipleJobs'] as bool?); - if (data.containsKey('qualifyingChildren')) builder.childrens(data['qualifyingChildren'] as int?); - if (data.containsKey('otherDependents')) builder.otherDeps(data['otherDependents'] as int?); + if (data.containsKey('multipleJobs')) + builder.multipleJob(data['multipleJobs'] as bool?); + if (data.containsKey('qualifyingChildren')) + builder.childrens(data['qualifyingChildren'] as int?); + if (data.containsKey('otherDependents')) + builder.otherDeps(data['otherDependents'] as int?); if (data.containsKey('otherIncome')) { - builder.otherInconme(double.tryParse(data['otherIncome'].toString())); + builder.otherInconme(double.tryParse(data['otherIncome'].toString())); } if (data.containsKey('deductions')) { - builder.deductions(double.tryParse(data['deductions'].toString())); + builder.deductions(double.tryParse(data['deductions'].toString())); } if (data.containsKey('extraWithholding')) { - builder.extraWithholding(double.tryParse(data['extraWithholding'].toString())); + builder.extraWithholding( + double.tryParse(data['extraWithholding'].toString())); } - if (data.containsKey('signature')) builder.signature(data['signature'] as String?); + if (data.containsKey('signature')) + builder.signature(data['signature'] as String?); } } diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/tax_forms_page.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/tax_forms_page.dart index 923e7f24..826518eb 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/tax_forms_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/tax_forms_page.dart @@ -1,3 +1,4 @@ +import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -62,7 +63,15 @@ class TaxFormsPage extends StatelessWidget { if (state.status == TaxFormsStatus.failure) { return Center( - child: Text(state.errorMessage ?? 'Error loading forms'), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: UiConstants.space5), + child: Text( + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'Error loading forms', + textAlign: TextAlign.center, + ), + ), ); } diff --git a/apps/mobile/packages/features/staff/profile_sections/finances/staff_bank_account/lib/src/data/repositories/bank_account_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/finances/staff_bank_account/lib/src/data/repositories/bank_account_repository_impl.dart index f98e7c15..e2957389 100644 --- a/apps/mobile/packages/features/staff/profile_sections/finances/staff_bank_account/lib/src/data/repositories/bank_account_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/finances/staff_bank_account/lib/src/data/repositories/bank_account_repository_impl.dart @@ -5,7 +5,9 @@ import 'package:krow_domain/krow_domain.dart'; import '../../domain/repositories/bank_account_repository.dart'; /// Implementation of [BankAccountRepository] that integrates with Data Connect. -class BankAccountRepositoryImpl implements BankAccountRepository { +class BankAccountRepositoryImpl + with DataErrorHandler + implements BankAccountRepository { /// Creates a [BankAccountRepositoryImpl]. const BankAccountRepositoryImpl({ required this.dataConnect, @@ -19,60 +21,65 @@ class BankAccountRepositoryImpl implements BankAccountRepository { @override Future> getAccounts() async { - final String staffId = _getStaffId(); - - final QueryResult - result = await dataConnect - .getAccountsByOwnerId(ownerId: staffId) - .execute(); - - return result.data.accounts.map((GetAccountsByOwnerIdAccounts account) { - return BankAccountAdapter.fromPrimitives( - id: account.id, - userId: account.ownerId, - bankName: account.bank, - accountNumber: account.accountNumber, - last4: account.last4, - sortCode: account.routeNumber, - type: account.type is Known ? (account.type as Known).value.name : null, - isPrimary: account.isPrimary, - ); - }).toList(); + return executeProtected(() async { + final String staffId = _getStaffId(); + + final QueryResult + result = await dataConnect + .getAccountsByOwnerId(ownerId: staffId) + .execute(); + + return result.data.accounts.map((GetAccountsByOwnerIdAccounts account) { + return BankAccountAdapter.fromPrimitives( + id: account.id, + userId: account.ownerId, + bankName: account.bank, + accountNumber: account.accountNumber, + last4: account.last4, + sortCode: account.routeNumber, + type: account.type is Known ? (account.type as Known).value.name : null, + isPrimary: account.isPrimary, + ); + }).toList(); + }); } @override Future addAccount(BankAccount account) async { - final String staffId = _getStaffId(); + return executeProtected(() async { + final String staffId = _getStaffId(); - final QueryResult - existingAccounts = await dataConnect - .getAccountsByOwnerId(ownerId: staffId) - .execute(); - final bool hasAccounts = existingAccounts.data.accounts.isNotEmpty; - final bool isPrimary = !hasAccounts; + final QueryResult + existingAccounts = await dataConnect + .getAccountsByOwnerId(ownerId: staffId) + .execute(); + final bool hasAccounts = existingAccounts.data.accounts.isNotEmpty; + final bool isPrimary = !hasAccounts; - await dataConnect.createAccount( - bank: account.bankName, - type: AccountType.values.byName(BankAccountAdapter.typeToString(account.type)), - last4: _safeLast4(account.last4, account.accountNumber), - ownerId: staffId, - ) - .isPrimary(isPrimary) - .accountNumber(account.accountNumber) - .routeNumber(account.sortCode) - .execute(); + await dataConnect.createAccount( + bank: account.bankName, + type: AccountType.values.byName(BankAccountAdapter.typeToString(account.type)), + last4: _safeLast4(account.last4, account.accountNumber), + ownerId: staffId, + ) + .isPrimary(isPrimary) + .accountNumber(account.accountNumber) + .routeNumber(account.sortCode) + .execute(); + }); } /// Helper to get the logged-in staff ID. String _getStaffId() { final auth.User? user = firebaseAuth.currentUser; if (user == null) { - throw Exception('User not authenticated'); + throw const NotAuthenticatedException( + technicalMessage: 'User not authenticated'); } final String? staffId = StaffSessionStore.instance.session?.staff?.id; if (staffId == null || staffId.isEmpty) { - throw Exception('Staff profile is missing or session not initialized.'); + throw const ServerException(technicalMessage: 'Staff profile is missing or session not initialized.'); } return staffId; } diff --git a/apps/mobile/packages/features/staff/profile_sections/finances/staff_bank_account/lib/src/presentation/pages/bank_account_page.dart b/apps/mobile/packages/features/staff/profile_sections/finances/staff_bank_account/lib/src/presentation/pages/bank_account_page.dart index ffa8e21f..d3900e2b 100644 --- a/apps/mobile/packages/features/staff/profile_sections/finances/staff_bank_account/lib/src/presentation/pages/bank_account_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/finances/staff_bank_account/lib/src/presentation/pages/bank_account_page.dart @@ -59,6 +59,17 @@ class BankAccountPage extends StatelessWidget { duration: const Duration(seconds: 3), ), ); + } else if (state.status == BankAccountStatus.error) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'An error occurred', + ), + behavior: SnackBarBehavior.floating, + ), + ); } }, builder: (BuildContext context, BankAccountState state) { @@ -67,7 +78,18 @@ class BankAccountPage extends StatelessWidget { } if (state.status == BankAccountStatus.error) { - return Center(child: Text(state.errorMessage ?? 'Error')); + return Center( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'Error', + textAlign: TextAlign.center, + style: UiTypography.body1m.copyWith(color: UiColors.textSecondary), + ), + ), + ); } return Column( diff --git a/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/data/repositories_impl/time_card_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/data/repositories_impl/time_card_repository_impl.dart index 4a6aba1c..15823f5b 100644 --- a/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/data/repositories_impl/time_card_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/data/repositories_impl/time_card_repository_impl.dart @@ -9,7 +9,9 @@ import 'package:krow_core/core.dart'; import '../../domain/repositories/time_card_repository.dart'; /// Implementation of [TimeCardRepository] using Firebase Data Connect. -class TimeCardRepositoryImpl implements TimeCardRepository { +class TimeCardRepositoryImpl + with dc.DataErrorHandler + implements TimeCardRepository { final dc.ExampleConnector _dataConnect; final firebase.FirebaseAuth _firebaseAuth; @@ -22,57 +24,62 @@ class TimeCardRepositoryImpl implements TimeCardRepository { Future _getStaffId() async { final firebase.User? user = _firebaseAuth.currentUser; - if (user == null) throw Exception('User not authenticated'); + if (user == null) { + throw const NotAuthenticatedException( + technicalMessage: 'User not authenticated'); + } final fdc.QueryResult result = await _dataConnect.getStaffByUserId(userId: user.uid).execute(); if (result.data.staffs.isEmpty) { - throw Exception('Staff profile not found'); + throw const ServerException(technicalMessage: 'Staff profile not found'); } return result.data.staffs.first.id; } @override Future> getTimeCards(DateTime month) async { - final String staffId = await _getStaffId(); - // Fetch applications. Limit can be adjusted, assuming 100 is safe for now. - final fdc.QueryResult result = - await _dataConnect.getApplicationsByStaffId(staffId: staffId).limit(100).execute(); + return executeProtected(() async { + final String staffId = await _getStaffId(); + // Fetch applications. Limit can be adjusted, assuming 100 is safe for now. + final fdc.QueryResult result = + await _dataConnect.getApplicationsByStaffId(staffId: staffId).limit(100).execute(); - return result.data.applications - .where((dc.GetApplicationsByStaffIdApplications app) { - final DateTime? shiftDate = app.shift.date == null - ? null - : DateTimeUtils.toDeviceTime(app.shift.date!.toDateTime()); - if (shiftDate == null) return false; - return shiftDate.year == month.year && shiftDate.month == month.month; - }) - .map((dc.GetApplicationsByStaffIdApplications app) { - final DateTime shiftDate = - DateTimeUtils.toDeviceTime(app.shift.date!.toDateTime()); - final String startTime = _formatTime(app.checkInTime) ?? _formatTime(app.shift.startTime) ?? ''; - final String endTime = _formatTime(app.checkOutTime) ?? _formatTime(app.shift.endTime) ?? ''; + return result.data.applications + .where((dc.GetApplicationsByStaffIdApplications app) { + final DateTime? shiftDate = app.shift.date == null + ? null + : DateTimeUtils.toDeviceTime(app.shift.date!.toDateTime()); + if (shiftDate == null) return false; + return shiftDate.year == month.year && shiftDate.month == month.month; + }) + .map((dc.GetApplicationsByStaffIdApplications app) { + final DateTime shiftDate = + DateTimeUtils.toDeviceTime(app.shift.date!.toDateTime()); + final String startTime = _formatTime(app.checkInTime) ?? _formatTime(app.shift.startTime) ?? ''; + final String endTime = _formatTime(app.checkOutTime) ?? _formatTime(app.shift.endTime) ?? ''; - // Prefer shiftRole values for pay/hours - final double hours = app.shiftRole.hours ?? 0.0; - final double rate = app.shiftRole.role.costPerHour; - final double pay = app.shiftRole.totalValue ?? 0.0; + // Prefer shiftRole values for pay/hours + final double hours = app.shiftRole.hours ?? 0.0; + final double rate = app.shiftRole.role.costPerHour; + final double pay = app.shiftRole.totalValue ?? 0.0; - return TimeCardAdapter.fromPrimitives( - id: app.id, - shiftTitle: app.shift.title, - clientName: app.shift.order.business.businessName, - date: shiftDate, - startTime: startTime, - endTime: endTime, - totalHours: hours, - hourlyRate: rate, - totalPay: pay, - status: app.status.stringValue, - location: app.shift.location, - ); - }) - .toList(); + return TimeCardAdapter.fromPrimitives( + id: app.id, + shiftTitle: app.shift.title, + clientName: app.shift.order.business.businessName, + date: shiftDate, + startTime: startTime, + endTime: endTime, + totalHours: hours, + hourlyRate: rate, + totalPay: pay, + status: app.status.stringValue, + location: app.shift.location, + ); + }) + .toList(); + }); } String? _formatTime(fdc.Timestamp? timestamp) { diff --git a/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/presentation/pages/time_card_page.dart b/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/presentation/pages/time_card_page.dart index 6805e7fa..e5555575 100644 --- a/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/presentation/pages/time_card_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/finances/time_card/lib/src/presentation/pages/time_card_page.dart @@ -27,6 +27,7 @@ class _TimeCardPageState extends State { @override Widget build(BuildContext context) { + final t = Translations.of(context); return BlocProvider.value( value: _bloc, child: Scaffold( @@ -49,12 +50,33 @@ class _TimeCardPageState extends State { child: Container(color: UiColors.border, height: 1.0), ), ), - body: BlocBuilder( + body: BlocConsumer( + listener: (context, state) { + if (state is TimeCardError) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + translateErrorKey(state.message), + ), + behavior: SnackBarBehavior.floating, + ), + ); + } + }, builder: (context, state) { if (state is TimeCardLoading) { return const Center(child: CircularProgressIndicator()); } else if (state is TimeCardError) { - return Center(child: Text('Error: ${state.message}')); + return Center( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + translateErrorKey(state.message), + textAlign: TextAlign.center, + style: UiTypography.body1m.copyWith(color: UiColors.textSecondary), + ), + ), + ); } else if (state is TimeCardLoaded) { return SingleChildScrollView( padding: const EdgeInsets.symmetric( diff --git a/apps/mobile/packages/features/staff/profile_sections/onboarding/emergency_contact/lib/src/data/repositories/emergency_contact_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/onboarding/emergency_contact/lib/src/data/repositories/emergency_contact_repository_impl.dart index ccbb3be4..c3ec4792 100644 --- a/apps/mobile/packages/features/staff/profile_sections/onboarding/emergency_contact/lib/src/data/repositories/emergency_contact_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/onboarding/emergency_contact/lib/src/data/repositories/emergency_contact_repository_impl.dart @@ -7,6 +7,7 @@ import '../../domain/repositories/emergency_contact_repository_interface.dart'; /// /// This repository delegates data operations to Firebase Data Connect. class EmergencyContactRepositoryImpl + with dc.DataErrorHandler implements EmergencyContactRepositoryInterface { final dc.ExampleConnector _dataConnect; final FirebaseAuth _firebaseAuth; @@ -20,64 +21,81 @@ class EmergencyContactRepositoryImpl Future _getStaffId() async { final user = _firebaseAuth.currentUser; - if (user == null) throw Exception('User not authenticated'); + if (user == null) { + throw const NotAuthenticatedException( + technicalMessage: 'User not authenticated'); + } final result = await _dataConnect.getStaffByUserId(userId: user.uid).execute(); if (result.data.staffs.isEmpty) { - throw Exception('Staff profile not found'); + throw const ServerException(technicalMessage: 'Staff profile not found'); } return result.data.staffs.first.id; } @override Future> getContacts() async { - final staffId = await _getStaffId(); - final result = - await _dataConnect.getEmergencyContactsByStaffId(staffId: staffId).execute(); + return executeProtected(() async { + final staffId = await _getStaffId(); + final result = await _dataConnect + .getEmergencyContactsByStaffId(staffId: staffId) + .execute(); - return result.data.emergencyContacts.map((dto) { - return EmergencyContactAdapter.fromPrimitives( - id: dto.id, - name: dto.name, - phone: dto.phone, - relationship: dto.relationship.stringValue, - ); - }).toList(); + return result.data.emergencyContacts.map((dto) { + return EmergencyContactAdapter.fromPrimitives( + id: dto.id, + name: dto.name, + phone: dto.phone, + relationship: dto.relationship.stringValue, + ); + }).toList(); + }); } @override Future saveContacts(List contacts) async { - final staffId = await _getStaffId(); + return executeProtected(() async { + final staffId = await _getStaffId(); - // 1. Get existing to delete - final existingResult = - await _dataConnect.getEmergencyContactsByStaffId(staffId: staffId).execute(); - final existingIds = - existingResult.data.emergencyContacts.map((e) => e.id).toList(); - - // 2. Delete all existing - await Future.wait(existingIds.map( - (id) => _dataConnect.deleteEmergencyContact(id: id).execute())); - - // 3. Create new - await Future.wait(contacts.map((contact) { - dc.RelationshipType rel = dc.RelationshipType.OTHER; - switch(contact.relationship) { - case RelationshipType.family: rel = dc.RelationshipType.FAMILY; break; - case RelationshipType.spouse: rel = dc.RelationshipType.SPOUSE; break; - case RelationshipType.friend: rel = dc.RelationshipType.FRIEND; break; - case RelationshipType.other: rel = dc.RelationshipType.OTHER; break; - } - - return _dataConnect - .createEmergencyContact( - name: contact.name, - phone: contact.phone, - relationship: rel, - staffId: staffId, - ) + // 1. Get existing to delete + final existingResult = await _dataConnect + .getEmergencyContactsByStaffId(staffId: staffId) .execute(); - })); + final existingIds = + existingResult.data.emergencyContacts.map((e) => e.id).toList(); + + // 2. Delete all existing + await Future.wait(existingIds.map( + (id) => _dataConnect.deleteEmergencyContact(id: id).execute())); + + // 3. Create new + await Future.wait(contacts.map((contact) { + dc.RelationshipType rel = dc.RelationshipType.OTHER; + switch (contact.relationship) { + case RelationshipType.family: + rel = dc.RelationshipType.FAMILY; + break; + case RelationshipType.spouse: + rel = dc.RelationshipType.SPOUSE; + break; + case RelationshipType.friend: + rel = dc.RelationshipType.FRIEND; + break; + case RelationshipType.other: + rel = dc.RelationshipType.OTHER; + break; + } + + return _dataConnect + .createEmergencyContact( + name: contact.name, + phone: contact.phone, + relationship: rel, + staffId: staffId, + ) + .execute(); + })); + }); } } \ No newline at end of file diff --git a/apps/mobile/packages/features/staff/profile_sections/onboarding/emergency_contact/lib/src/presentation/pages/emergency_contact_screen.dart b/apps/mobile/packages/features/staff/profile_sections/onboarding/emergency_contact/lib/src/presentation/pages/emergency_contact_screen.dart index 3e3637cd..d96f5d4c 100644 --- a/apps/mobile/packages/features/staff/profile_sections/onboarding/emergency_contact/lib/src/presentation/pages/emergency_contact_screen.dart +++ b/apps/mobile/packages/features/staff/profile_sections/onboarding/emergency_contact/lib/src/presentation/pages/emergency_contact_screen.dart @@ -1,3 +1,4 @@ +import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -8,7 +9,6 @@ import '../widgets/emergency_contact_form_item.dart'; import '../widgets/emergency_contact_info_banner.dart'; import '../widgets/emergency_contact_save_button.dart'; - /// The Staff Emergency Contact screen. /// /// This screen allows staff to manage their emergency contacts during onboarding. @@ -19,6 +19,7 @@ class EmergencyContactScreen extends StatelessWidget { @override Widget build(BuildContext context) { + Translations.of(context); // Force rebuild on locale change return Scaffold( appBar: AppBar( elevation: 0, @@ -38,10 +39,18 @@ class EmergencyContactScreen extends StatelessWidget { body: BlocProvider( create: (context) => Modular.get(), child: BlocConsumer( + listener: (context, state) { if (state.status == EmergencyContactStatus.failure) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(state.errorMessage ?? 'An error occurred')), + SnackBar( + content: Text( + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'An error occurred', + ), + behavior: SnackBarBehavior.floating, + ), ); } }, diff --git a/apps/mobile/packages/features/staff/profile_sections/onboarding/experience/lib/src/data/repositories/experience_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/onboarding/experience/lib/src/data/repositories/experience_repository_impl.dart index 49af4cb9..159dd31f 100644 --- a/apps/mobile/packages/features/staff/profile_sections/onboarding/experience/lib/src/data/repositories/experience_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/onboarding/experience/lib/src/data/repositories/experience_repository_impl.dart @@ -2,13 +2,17 @@ import 'package:firebase_auth/firebase_auth.dart'; import 'package:krow_data_connect/krow_data_connect.dart' as dc; import '../../domain/repositories/experience_repository_interface.dart'; +import 'package:krow_domain/krow_domain.dart'; + /// Implementation of [ExperienceRepositoryInterface] that delegates to Data Connect. -class ExperienceRepositoryImpl implements ExperienceRepositoryInterface { +class ExperienceRepositoryImpl + with dc.DataErrorHandler + implements ExperienceRepositoryInterface { final dc.ExampleConnector _dataConnect; // ignore: unused_field final FirebaseAuth _firebaseAuth; - /// Creates a [ExperienceRepositoryImpl] using Da a Connect and Auth. + /// Creates a [ExperienceRepositoryImpl] using Data Connect and Auth. ExperienceRepositoryImpl({ required dc.ExampleConnector dataConnect, required FirebaseAuth firebaseAuth, @@ -17,26 +21,33 @@ class ExperienceRepositoryImpl implements ExperienceRepositoryInterface { Future _getStaff() async { final user = _firebaseAuth.currentUser; - if (user == null) throw Exception('User not authenticated'); + if (user == null) { + throw const NotAuthenticatedException( + technicalMessage: 'User not authenticated'); + } final result = await _dataConnect.getStaffByUserId(userId: user.uid).execute(); if (result.data.staffs.isEmpty) { - throw Exception('Staff profile not found'); + throw const ServerException(technicalMessage: 'Staff profile not found'); } return result.data.staffs.first; } @override Future> getIndustries() async { - final staff = await _getStaff(); - return staff.industries ?? []; + return executeProtected(() async { + final staff = await _getStaff(); + return staff.industries ?? []; + }); } @override Future> getSkills() async { - final staff = await _getStaff(); - return staff.skills ?? []; + return executeProtected(() async { + final staff = await _getStaff(); + return staff.skills ?? []; + }); } @override @@ -44,15 +55,13 @@ class ExperienceRepositoryImpl implements ExperienceRepositoryInterface { List industries, List skills, ) async { - try { - final staff = await _getStaff(); - await _dataConnect - .updateStaff(id: staff.id) - .industries(industries) - .skills(skills) - .execute(); - } catch (e) { - throw Exception('Failed to save experience: $e'); - } + return executeProtected(() async { + final staff = await _getStaff(); + await _dataConnect + .updateStaff(id: staff.id) + .industries(industries) + .skills(skills) + .execute(); + }); } } diff --git a/apps/mobile/packages/features/staff/profile_sections/onboarding/experience/lib/src/presentation/pages/experience_page.dart b/apps/mobile/packages/features/staff/profile_sections/onboarding/experience/lib/src/presentation/pages/experience_page.dart index 65e19d44..f826b943 100644 --- a/apps/mobile/packages/features/staff/profile_sections/onboarding/experience/lib/src/presentation/pages/experience_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/onboarding/experience/lib/src/presentation/pages/experience_page.dart @@ -46,7 +46,7 @@ class ExperiencePage extends StatelessWidget { @override Widget build(BuildContext context) { - final i18n = t.staff.onboarding.experience; + final i18n = Translations.of(context).staff.onboarding.experience; return Scaffold( appBar: UiAppBar( @@ -64,7 +64,14 @@ class ExperiencePage extends StatelessWidget { Modular.to.pop(); } else if (state.status == ExperienceStatus.failure) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(state.errorMessage ?? 'An error occurred')), + SnackBar( + content: Text( + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'An error occurred', + ), + behavior: SnackBarBehavior.floating, + ), ); } }, diff --git a/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/data/repositories/personal_info_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/data/repositories/personal_info_repository_impl.dart index 9a8045cf..e2e4b5ba 100644 --- a/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/data/repositories/personal_info_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/data/repositories/personal_info_repository_impl.dart @@ -13,7 +13,9 @@ import '../../domain/repositories/personal_info_repository_interface.dart'; /// - Delegating all data access to the data_connect layer /// - Mapping between data_connect DTOs and domain entities /// - Containing no business logic -class PersonalInfoRepositoryImpl implements PersonalInfoRepositoryInterface { +class PersonalInfoRepositoryImpl + with DataErrorHandler + implements PersonalInfoRepositoryInterface { /// Creates a [PersonalInfoRepositoryImpl]. /// @@ -28,58 +30,63 @@ class PersonalInfoRepositoryImpl implements PersonalInfoRepositoryInterface { @override Future getStaffProfile() async { - final firebase_auth.User? user = _firebaseAuth.currentUser; - if (user == null) { - throw Exception('User not authenticated'); - } + return executeProtected(() async { + final firebase_auth.User? user = _firebaseAuth.currentUser; + if (user == null) { + throw NotAuthenticatedException( + technicalMessage: 'User not authenticated'); + } - // Query staff data from Firebase Data Connect - final QueryResult result = - await _dataConnect.getStaffByUserId(userId: user.uid).execute(); + // Query staff data from Firebase Data Connect + final QueryResult result = + await _dataConnect.getStaffByUserId(userId: user.uid).execute(); - if (result.data.staffs.isEmpty) { - throw Exception('Staff profile not found for User ID: ${user.uid}'); - } + if (result.data.staffs.isEmpty) { + throw const ServerException(technicalMessage: 'Staff profile not found'); + } - final GetStaffByUserIdStaffs rawStaff = result.data.staffs.first; + final GetStaffByUserIdStaffs rawStaff = result.data.staffs.first; - // Map from data_connect DTO to domain entity - return _mapToStaffEntity(rawStaff); + // Map from data_connect DTO to domain entity + return _mapToStaffEntity(rawStaff); + }); } @override Future updateStaffProfile({required String staffId, required Map data}) async { - // Start building the update mutation - UpdateStaffVariablesBuilder updateBuilder = _dataConnect.updateStaff(id: staffId); + return executeProtected(() async { + // Start building the update mutation + UpdateStaffVariablesBuilder updateBuilder = _dataConnect.updateStaff(id: staffId); - // Apply updates from map if present - if (data.containsKey('name')) { - updateBuilder = updateBuilder.fullName(data['name'] as String); - } - if (data.containsKey('email')) { - updateBuilder = updateBuilder.email(data['email'] as String); - } - if (data.containsKey('phone')) { - updateBuilder = updateBuilder.phone(data['phone'] as String?); - } - if (data.containsKey('avatar')) { - updateBuilder = updateBuilder.photoUrl(data['avatar'] as String?); - } - if (data.containsKey('preferredLocations')) { - // After schema update and SDK regeneration, preferredLocations accepts List - updateBuilder = updateBuilder.preferredLocations(data['preferredLocations'] as List); - } + // Apply updates from map if present + if (data.containsKey('name')) { + updateBuilder = updateBuilder.fullName(data['name'] as String); + } + if (data.containsKey('email')) { + updateBuilder = updateBuilder.email(data['email'] as String); + } + if (data.containsKey('phone')) { + updateBuilder = updateBuilder.phone(data['phone'] as String?); + } + if (data.containsKey('avatar')) { + updateBuilder = updateBuilder.photoUrl(data['avatar'] as String?); + } + if (data.containsKey('preferredLocations')) { + // After schema update and SDK regeneration, preferredLocations accepts List + updateBuilder = updateBuilder.preferredLocations(data['preferredLocations'] as List); + } - // Execute the update - final OperationResult result = - await updateBuilder.execute(); + // Execute the update + final OperationResult result = + await updateBuilder.execute(); - if (result.data.staff_update == null) { - throw Exception('Failed to update staff profile'); - } + if (result.data.staff_update == null) { + throw const ServerException(technicalMessage: 'Failed to update staff profile'); + } - // Fetch the updated staff profile to return complete entity - return getStaffProfile(); + // Fetch the updated staff profile to return complete entity + return getStaffProfile(); + }); } @override diff --git a/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/pages/personal_info_page.dart b/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/pages/personal_info_page.dart index 50fae0a9..78f27ab7 100644 --- a/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/pages/personal_info_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/pages/personal_info_page.dart @@ -23,7 +23,7 @@ class PersonalInfoPage extends StatelessWidget { @override Widget build(BuildContext context) { - final TranslationsStaffOnboardingPersonalInfoEn i18n = t.staff.onboarding.personal_info; + final i18n = Translations.of(context).staff.onboarding.personal_info; return BlocProvider( create: (BuildContext context) => Modular.get(), child: BlocListener( @@ -39,8 +39,12 @@ class PersonalInfoPage extends StatelessWidget { } else if (state.status == PersonalInfoStatus.error) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(state.errorMessage ?? 'An error occurred'), - backgroundColor: UiColors.destructive, + content: Text( + state.errorMessage != null + ? translateErrorKey(state.errorMessage!) + : 'An error occurred', + ), + behavior: SnackBarBehavior.floating, duration: const Duration(seconds: 3), ), ); diff --git a/apps/mobile/packages/features/staff/shifts/lib/src/presentation/pages/shifts_page.dart b/apps/mobile/packages/features/staff/shifts/lib/src/presentation/pages/shifts_page.dart index 3d86039d..f4a65338 100644 --- a/apps/mobile/packages/features/staff/shifts/lib/src/presentation/pages/shifts_page.dart +++ b/apps/mobile/packages/features/staff/shifts/lib/src/presentation/pages/shifts_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:design_system/design_system.dart'; +import 'package:core_localization/core_localization.dart'; import 'package:krow_domain/krow_domain.dart'; import '../blocs/shifts/shifts_bloc.dart'; import '../widgets/tabs/my_shifts_tab.dart'; @@ -66,9 +67,20 @@ class _ShiftsPageState extends State { @override Widget build(BuildContext context) { + final t = Translations.of(context); return BlocProvider.value( value: _bloc, - child: BlocBuilder( + child: BlocConsumer( + listener: (context, state) { + if (state is ShiftsError) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(translateErrorKey(state.message)), + behavior: SnackBarBehavior.floating, + ), + ); + } + }, builder: (context, state) { final bool baseLoaded = state is ShiftsLoaded; final List myShifts = (state is ShiftsLoaded) @@ -123,9 +135,9 @@ class _ShiftsPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, spacing: 16, children: [ - const Text( - "Shifts", - style: TextStyle( + Text( + t.staff_shifts.title, + style: const TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: Colors.white, @@ -137,7 +149,7 @@ class _ShiftsPageState extends State { children: [ _buildTab( "myshifts", - "My Shifts", + t.staff_shifts.tabs.my_shifts, UiIcons.calendar, myShifts.length, showCount: myShiftsLoaded, @@ -146,7 +158,7 @@ class _ShiftsPageState extends State { const SizedBox(width: 8), _buildTab( "find", - "Find Shifts", + t.staff_shifts.tabs.find_work, UiIcons.search, availableJobs .length, // Passed unfiltered count as badge? Or logic inside? Pass availableJobs. @@ -156,7 +168,7 @@ class _ShiftsPageState extends State { const SizedBox(width: 8), _buildTab( "history", - "History", + t.staff_shifts.tabs.history, UiIcons.clock, historyShifts.length, showCount: historyLoaded, @@ -172,7 +184,26 @@ class _ShiftsPageState extends State { Expanded( child: state is ShiftsLoading ? const Center(child: CircularProgressIndicator()) - : _buildTabContent( + : state is ShiftsError + ? Center( + child: Padding( + padding: const EdgeInsets.all(24.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + translateErrorKey(state.message), + style: const TextStyle( + fontSize: 16, + color: Color(0xFF64748B), + ), + textAlign: TextAlign.center, + ), + ], + ), + ), + ) + : _buildTabContent( myShifts, pendingAssignments, cancelledShifts, diff --git a/apps/mobile/packages/features/staff/staff_main/lib/src/presentation/widgets/staff_main_bottom_bar.dart b/apps/mobile/packages/features/staff/staff_main/lib/src/presentation/widgets/staff_main_bottom_bar.dart index 4655cf4d..49c71126 100644 --- a/apps/mobile/packages/features/staff/staff_main/lib/src/presentation/widgets/staff_main_bottom_bar.dart +++ b/apps/mobile/packages/features/staff/staff_main/lib/src/presentation/widgets/staff_main_bottom_bar.dart @@ -36,6 +36,7 @@ class StaffMainBottomBar extends StatelessWidget { @override Widget build(BuildContext context) { + final t = Translations.of(context); // Staff App colors from design system // Using primary (Blue) for active as per prototype const Color activeColor = UiColors.primary; diff --git a/docs/ERROR_HANDLING_ARCHITECTURE.md b/docs/ERROR_HANDLING_ARCHITECTURE.md new file mode 100644 index 00000000..da9cd6df --- /dev/null +++ b/docs/ERROR_HANDLING_ARCHITECTURE.md @@ -0,0 +1,131 @@ +# Centralized Error Handling Architecture +**Project:** KROW Workforce Mobile App + +## 1. Executive Summary +We have implemented a **Centralized Error Handling System** that ensures the entire application (Staff & Client) handles errors consistently, reliably, and with full localization support. + +Instead of writing error handling code in every single feature (which leads to bugs and inconsistent messages), we rely on a global safety net that catches **Network Failures**, **Server Errors (500)**, **Not Found Errors (404)**, and **Business Logic Violations** automatically. + +### Key Benefits +* **Safety:** The app never crashes due to unhandled API errors. +* **Consistency:** A network error looks the same in "Shifts" as it does in "billing". +* **Localization:** All error messages are automatically translated (English/Spanish). +* **Speed:** Developers can build features faster without worrying about `try/catch` blocks. + +### Technical Excellence (Status Code Handling) +We don't just catch "errors"; we understand them. The system automatically categorizes and handles: +* **500 (Server Error):** "Our servers are having a moment. Please try again." +* **404 (Not Found):** "The resource you're looking for (Shift/Profile) is missing." +* **401 (Unauthorized):** "Your session expired. Please log in again." (Auto-redirect) +* **403 (Forbidden):** "You don't have permission to access this area." +* **503 (Unavailable):** "Maintenance mode or overloaded. Back in a bit!" + +--- + +## 2. Architecture Overview + +The error handling flows through three distinct layers, ensuring separation of concerns: + +```mermaid +graph TD + A[Data Layer / Repository] -->|Throws AppException| B[BLoC Layer / State Management] + B -->|Emits Error Key| C[UI Layer / Presentation] + + subgraph "1. Data Layer (The Guard)" + A -- Captures Exceptions --> D[DataErrorHandler Mixin] + D -- Maps to --> E[NetworkException, ServerException, etc.] + end + + subgraph "2. BLoC Layer (The Translator)" + B -- Uses --> F[BlocErrorHandler Mixin] + F -- Catches AppException --> G[converts to 'errors.category.type'] + end + + subgraph "3. UI Layer (The Messenger)" + C -- Calls --> H[translateErrorKey()] + H -- Returns --> I["Localized String (e.g. 'Sin conexión')"] + end +``` + +### 1. The Data Layer (The Guard) +* **Role:** Wraps all API calls. +* **Mechanism:** Catches raw errors (SocketException, FirebaseException) and converts them into domain-specific `AppExceptions` (e.g., `NetworkException`). +* **Location:** `packages/data_connect/lib/src/mixins/data_error_handler.dart` + +### 2. The BLoC Layer (The Logic) +* **Role:** Manages state. +* **Mechanism:** Uses `handleError` helper to execute logic. If an `AppException` bubbles up, it automatically emits a failure state with a **Message Key** (e.g., `errors.auth.session_expired`). +* **Location:** `packages/core/lib/src/presentation/mixins/bloc_error_handler.dart` + +### 3. The UI Layer (The Presenter) +* **Role:** Shows the message. +* **Mechanism:** Observes the state. When an error occurs, it passes the key to `translateErrorKey(key)` which returns the user-friendly text from the active language file (e.g., `es.i18n.json`). +* **Location:** `packages/core_localization/lib/src/utils/error_translator.dart` + +--- + +## 3. Verified Features +The following features have been audited and are confirmed to use the Centralized Error Handler: + +### **✅ Core Infrastructure** +* Authentication (Login/Signup) +* Firebase Data Connect Integration +* Localization Engine + +### **✅ Staff App Features** +| Feature | Status | Notes | +| :--- | :---: | :--- | +| **Shifts** | ✅ | Handles availability, accept, history errors | +| **Profile** | ✅ | Personal info, experience, attire updates | +| **Onboarding** | ✅ | Tax forms (W4/I9), emergency contacts | +| **Compliance** | ✅ | Document uploads, certificate management | +| **Financials** | ✅ | Bank accounts, time cards, payments | +| **Availability** | ✅ | Weekly schedule blocking | +| **Clock In** | ✅ | Location/Time validation errors | + +### **✅ Client App Features** +| Feature | Status | Notes | +| :--- | :---: | :--- | +| **Auth** | ✅ | Login, Signup failures | +| **Create Order** | ✅ | Type selection, validation | +| **View Orders** | ✅ | Loading lists, filtering | +| **Hubs** | ✅ | NFC assignment errors | +| **Billing** | ✅ | Payment methods, invoicing | +| **Coverage** | ✅ | Dashboard metric loading | + +--- + +## 4. How to Verify (Demo Script) + +### Test A: The "Tunnel" Test (Network) +1. Open the app to the **Shifts** page. +2. Toggle **Airplane Mode ON**. +3. Pull to refresh the list. +4. **Result:** App shows a gentle `snackbar` error: *"No internet connection"* (or Spanish equivalent). **No Crash.** + +### Test B: The "Duplicate Data" Test (Smart Validation) +1. Log in on two devices with the same account (if possible) or simply use a known registered email. +2. Go to the **Sign Up** page. +3. Try to register a new account using that *existing* email. +4. **Result:** App instantly displays specific, helpful feedback: *"An account with this email already exists."* instead of a generic failure. +5. **Why it matters:** Proves the backend and frontend are synced to guide the user, not just block them. + +### Test C: The "Crash Proof" Test (The Safety Net) +1. **Scenario:** Even if a developer introduces a bug (like a random exception) or the server returns a 500 status. +2. **Result:** The app catches the unknown error, logs it internally, and shows a safe default message: *"Something went wrong. Please try again."* +3. **Why it matters:** The app never crashes or closes unexpectedly, preserving user trust. + +### Test D: The "Language" Test (Localization) +1. Trigger an error (like wrong password). +2. Change phone language to **Spanish**. +3. Trigger the same error. +4. **Result:** Message automatically translates: *"Correo electrónico o contraseña inválidos."* + +--- + +## 5. Code Locations (Reference) +* **Exceptions:** `packages/domain/lib/src/exceptions/app_exception.dart` +* **Data Mixin:** `packages/data_connect/lib/src/mixins/data_error_handler.dart` +* **Bloc Mixin:** `packages/core/lib/src/presentation/mixins/bloc_error_handler.dart` +* **Translator:** `packages/core_localization/lib/src/utils/error_translator.dart` +* **Strings:** `packages/core_localization/lib/src/l10n/*.i18n.json`