feat: Centralized Error Handling & Crash Fixes

This commit is contained in:
2026-02-11 18:52:23 +05:30
parent ea06510474
commit c1112ac01c
51 changed files with 2104 additions and 960 deletions

View File

@@ -12,7 +12,9 @@ import 'package:krow_domain/krow_domain.dart'
AccountExistsException,
UserNotFoundException,
UnauthorizedAppException,
PasswordMismatchException;
UnauthorizedAppException,
PasswordMismatchException,
NetworkException;
import 'package:krow_domain/krow_domain.dart' as domain;
import '../../domain/repositories/auth_repository_interface.dart';
@@ -63,6 +65,10 @@ class AuthRepositoryImpl
throw InvalidCredentialsException(
technicalMessage: 'Firebase error code: ${e.code}',
);
} else if (e.code == 'network-request-failed') {
throw NetworkException(
technicalMessage: 'Firebase: ${e.message}',
);
} else {
throw SignInFailedException(
technicalMessage: 'Firebase auth error: ${e.message}',
@@ -120,6 +126,10 @@ class AuthRepositoryImpl
password: password,
companyName: companyName,
);
} else if (e.code == 'network-request-failed') {
throw NetworkException(
technicalMessage: 'Firebase: ${e.message}',
);
} else {
throw SignUpFailedException(
technicalMessage: 'Firebase auth error: ${e.message}',

View File

@@ -47,8 +47,11 @@ class ClientSignInPage extends StatelessWidget {
final String errorMessage = state.errorMessage != null
? translateErrorKey(state.errorMessage!)
: t.errors.generic.unknown;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(errorMessage)),
UiSnackbar.show(
context,
message: errorMessage,
type: UiSnackbarType.error,
margin: const EdgeInsets.only(bottom: 120, left: 16, right: 16),
);
}
},

View File

@@ -51,8 +51,11 @@ class ClientSignUpPage extends StatelessWidget {
final String errorMessage = state.errorMessage != null
? translateErrorKey(state.errorMessage!)
: t.errors.generic.unknown;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(errorMessage)),
UiSnackbar.show(
context,
message: errorMessage,
type: UiSnackbarType.error,
margin: const EdgeInsets.only(bottom: 120, left: 16, right: 16),
);
}
},

View File

@@ -47,9 +47,11 @@ class _ClientSignUpFormState extends State<ClientSignUpForm> {
void _handleSubmit() {
if (_passwordController.text != _confirmPasswordController.text) {
ScaffoldMessenger.of(
UiSnackbar.show(
context,
).showSnackBar(const SnackBar(content: Text('Passwords do not match')));
message: translateErrorKey('passwords_dont_match'),
type: UiSnackbarType.error,
);
return;
}