Refactor widgets & imports; add krow_domain

Add local krow_domain dependency to client, staff apps and client home package. Numerous UI/widget cleanups across features: add const where applicable, use explicit List<Widget> types and List<Widget>.generate, add super.key to constructors, tighten BlocProvider generics, replace some Containers with SizedBox, and simplify InputDecoration/Border constructors. Fix API error handler to return a const UnknownException. Update internal imports to package-style paths (staff_home, staff_payments, staff_main repository interface) and normalize Flutter imports (use material.dart). Add missing braces for early returns in tax form pages. Mostly formatting and small API/typing refactors with no behavioral changes intended.
This commit is contained in:
Achintha Isuru
2026-03-18 10:27:31 -04:00
parent e471fd12f2
commit 9ee8467632
34 changed files with 128 additions and 151 deletions

View File

@@ -5,6 +5,7 @@ import 'package:core_localization/core_localization.dart';
/// Widget for certificate metadata input fields (name, issuer, number).
class CertificateMetadataFields extends StatelessWidget {
const CertificateMetadataFields({
super.key,
required this.nameController,
required this.issuerController,
required this.numberController,
@@ -32,9 +33,7 @@ class CertificateMetadataFields extends StatelessWidget {
enabled: isNewCertificate,
decoration: InputDecoration(
hintText: t.staff_certificates.upload_modal.name_hint,
border: OutlineInputBorder(
borderRadius: UiConstants.radiusLg,
),
border: OutlineInputBorder(borderRadius: UiConstants.radiusLg),
),
),
const SizedBox(height: UiConstants.space4),
@@ -50,27 +49,20 @@ class CertificateMetadataFields extends StatelessWidget {
enabled: isNewCertificate,
decoration: InputDecoration(
hintText: t.staff_certificates.upload_modal.issuer_hint,
border: OutlineInputBorder(
borderRadius: UiConstants.radiusLg,
),
border: OutlineInputBorder(borderRadius: UiConstants.radiusLg),
),
),
const SizedBox(height: UiConstants.space4),
// Certificate Number Field
Text(
'Certificate Number',
style: UiTypography.body2m.textPrimary,
),
Text('Certificate Number', style: UiTypography.body2m.textPrimary),
const SizedBox(height: UiConstants.space2),
TextField(
controller: numberController,
enabled: isNewCertificate,
decoration: InputDecoration(
hintText: 'Enter number if applicable',
border: OutlineInputBorder(
borderRadius: UiConstants.radiusLg,
),
border: OutlineInputBorder(borderRadius: UiConstants.radiusLg),
),
),
],

View File

@@ -8,6 +8,7 @@ import '../../blocs/certificate_upload/certificate_upload_cubit.dart';
/// Widget for attestation checkbox and action buttons in certificate upload form.
class CertificateUploadActions extends StatelessWidget {
const CertificateUploadActions({
super.key,
required this.isAttested,
required this.isFormValid,
required this.isUploading,
@@ -34,10 +35,9 @@ class CertificateUploadActions extends StatelessWidget {
children: <Widget>[
Checkbox(
value: isAttested,
onChanged: (bool? val) =>
BlocProvider.of<CertificateUploadCubit>(context).setAttested(
val ?? false,
),
onChanged: (bool? val) => BlocProvider.of<CertificateUploadCubit>(
context,
).setAttested(val ?? false),
activeColor: UiColors.primary,
),
Expanded(
@@ -54,17 +54,11 @@ class CertificateUploadActions extends StatelessWidget {
onPressed: isFormValid ? onUploadPressed : null,
style: ElevatedButton.styleFrom(
backgroundColor: UiColors.primary,
padding: const EdgeInsets.symmetric(
vertical: UiConstants.space4,
),
shape: RoundedRectangleBorder(
borderRadius: UiConstants.radiusLg,
),
padding: const EdgeInsets.symmetric(vertical: UiConstants.space4),
shape: RoundedRectangleBorder(borderRadius: UiConstants.radiusLg),
),
child: isUploading
? const CircularProgressIndicator(
color: Colors.white,
)
? const CircularProgressIndicator(color: Colors.white)
: Text(
t.staff_certificates.upload_modal.save,
style: UiTypography.body1m.white,
@@ -87,9 +81,7 @@ class CertificateUploadActions extends StatelessWidget {
),
shape: RoundedRectangleBorder(
borderRadius: UiConstants.radiusLg,
side: const BorderSide(
color: UiColors.destructive,
),
side: const BorderSide(color: UiColors.destructive),
),
),
),

View File

@@ -6,6 +6,7 @@ import 'package:core_localization/core_localization.dart';
/// Widget for selecting certificate expiry date.
class ExpiryDateField extends StatelessWidget {
const ExpiryDateField({
super.key,
required this.selectedDate,
required this.onTap,
});

View File

@@ -12,23 +12,23 @@ class CertificatesHeaderSkeleton extends StatelessWidget {
width: double.infinity,
padding: const EdgeInsets.all(UiConstants.space5),
decoration: const BoxDecoration(color: UiColors.primary),
child: SafeArea(
child: const SafeArea(
bottom: false,
child: Column(
children: <Widget>[
const SizedBox(height: UiConstants.space4),
const UiShimmerCircle(size: 64),
const SizedBox(height: UiConstants.space3),
SizedBox(height: UiConstants.space4),
UiShimmerCircle(size: 64),
SizedBox(height: UiConstants.space3),
UiShimmerLine(
width: 120,
height: 14,
),
const SizedBox(height: UiConstants.space2),
SizedBox(height: UiConstants.space2),
UiShimmerLine(
width: 80,
height: 12,
),
const SizedBox(height: UiConstants.space6),
SizedBox(height: UiConstants.space6),
],
),
),

View File

@@ -178,8 +178,9 @@ class _FormI9PageState extends State<FormI9Page> {
}
},
builder: (BuildContext context, FormI9State state) {
if (state.status == FormI9Status.success)
if (state.status == FormI9Status.success) {
return _buildSuccessView(i18n);
}
return Scaffold(
backgroundColor: UiColors.background,

View File

@@ -180,8 +180,9 @@ class _FormW4PageState extends State<FormW4Page> {
}
},
builder: (BuildContext context, FormW4State state) {
if (state.status == FormW4Status.success)
if (state.status == FormW4Status.success) {
return _buildSuccessView(i18n);
}
return Scaffold(
backgroundColor: UiColors.background,

View File

@@ -39,11 +39,11 @@ class TappableRow extends StatelessWidget {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: UiConstants.space3,
children: [
children: <Widget>[
FieldLabel(text: i18n.locations_label),
GestureDetector(
onTap: enabled ? onTap : null,
child: Container(
child: SizedBox(
width: double.infinity,
child: Row(
children: <Widget>[