This commit is contained in:
2026-03-11 10:46:37 +05:30
parent b9574eb96a
commit 41a222ea11
2 changed files with 19 additions and 20 deletions

View File

@@ -1,5 +1,4 @@
// ignore_for_file: always_specify_types, depend_on_referenced_packages, dead_code, dead_null_aware_expression, unused_local_variable, unused_import, sort_constructors_first, prefer_final_fields, prefer_const_constructors, deprecated_member_use, implicit_call_tearoffs
import 'package:firebase_data_connect/src/core/ref.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';
import '../../domain/repositories/billing_connector_repository.dart';
@@ -131,7 +130,9 @@ class BillingConnectorRepositoryImpl implements BillingConnectorRepository {
final List<dc.ListShiftRolesByBusinessAndDatesSummaryShiftRoles>
shiftRoles = result.data.shiftRoles;
if (shiftRoles.isEmpty) return <InvoiceItem>[];
if (shiftRoles.isEmpty) {
return <InvoiceItem>[];
}
final Map<String, _RoleSummary> summary = <String, _RoleSummary>{};
for (final dc.ListShiftRolesByBusinessAndDatesSummaryShiftRoles role
@@ -272,16 +273,17 @@ class BillingConnectorRepositoryImpl implements BillingConnectorRepository {
int breakMin = 0;
final String? breakType = app.shiftRole?.breakType?.toString();
if (breakType != null) {
if (breakType.contains('10'))
if (breakType.contains('10')) {
breakMin = 10;
else if (breakType.contains('15'))
} else if (breakType.contains('15')) {
breakMin = 15;
else if (breakType.contains('30'))
} else if (breakType.contains('30')) {
breakMin = 30;
else if (breakType.contains('45'))
} else if (breakType.contains('45')) {
breakMin = 45;
else if (breakType.contains('60'))
} else if (breakType.contains('60')) {
breakMin = 60;
}
}
return InvoiceWorker(
@@ -324,9 +326,11 @@ class BillingConnectorRepositoryImpl implements BillingConnectorRepository {
}
double _calculateTotalHours(List<dynamic> roles) {
return roles.fold<double>(0.0, (sum, role) {
final hours = role['hours'] ?? role['workHours'] ?? role['totalHours'];
if (hours is num) return sum + hours.toDouble();
return roles.fold<double>(0.0, (double sum, dynamic role) {
final dynamic hours = role['hours'] ?? role['workHours'] ?? role['totalHours'];
if (hours is num) {
return sum + hours.toDouble();
}
return sum;
});
}

View File

@@ -1,4 +1,3 @@
// ignore_for_file: always_specify_types, depend_on_referenced_packages, dead_code, dead_null_aware_expression, unused_local_variable, unused_import, sort_constructors_first, prefer_final_fields, prefer_const_constructors, deprecated_member_use, implicit_call_tearoffs, implementation_imports
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -30,27 +29,24 @@ class OtpInputField extends StatefulWidget {
}
class _OtpInputFieldState extends State<OtpInputField> {
final List<TextEditingController> _controllers = List.generate(
final List<TextEditingController> _controllers = List<TextEditingController>.generate(
6,
(_) => TextEditingController(),
(int _) => TextEditingController(),
);
final List<FocusNode> _focusNodes = List.generate(6, (_) => FocusNode());
final List<FocusNode> _focusNodes = List<FocusNode>.generate(6, (int _) => FocusNode());
/// Hidden field for E2E: Maestro inputText sends full OTP in one call;
/// the 6 visible boxes have maxLength:1 and would truncate.
late final TextEditingController _hiddenController;
late final FocusNode _hiddenFocusNode;
@override
void initState() {
super.initState();
_hiddenController = TextEditingController();
_hiddenFocusNode = FocusNode();
}
@override
void dispose() {
_hiddenController.dispose();
_hiddenFocusNode.dispose();
for (final TextEditingController controller in _controllers) {
controller.dispose();
@@ -111,7 +107,7 @@ class _OtpInputFieldState extends State<OtpInputField> {
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: List.generate(6, (int index) {
children: List<Widget>.generate(6, (int index) {
final TextField field = TextField(
controller: _controllers[index],
focusNode: _focusNodes[index],
@@ -157,7 +153,6 @@ class _OtpInputFieldState extends State<OtpInputField> {
child: Opacity(
opacity: 0.01,
child: TextField(
controller: _hiddenController,
focusNode: _hiddenFocusNode,
keyboardType: TextInputType.number,
inputFormatters: <TextInputFormatter>[