Fix: Resolve critical linting issues and bugs (concurrency, syntax, dead code)

This commit is contained in:
2026-02-10 19:12:01 +05:30
parent 5e7bf0d5c0
commit 7570ffa3b9
46 changed files with 4057 additions and 1299 deletions

View File

@@ -1,5 +1,6 @@
import 'package:intl/intl.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:krow_core/core.dart';
import 'package:krow_domain/krow_domain.dart';
import '../../domain/arguments/orders_day_arguments.dart';
import '../../domain/arguments/orders_range_arguments.dart';
@@ -10,14 +11,14 @@ import 'view_orders_state.dart';
/// Cubit for managing the state of the View Orders feature.
///
/// This Cubit handles loading orders, date selection, and tab filtering.
class ViewOrdersCubit extends Cubit<ViewOrdersState> {
class ViewOrdersCubit extends Cubit<ViewOrdersState>
with BlocErrorHandler<ViewOrdersState> {
ViewOrdersCubit({
required GetOrdersUseCase getOrdersUseCase,
required GetAcceptedApplicationsForDayUseCase getAcceptedAppsUseCase,
})
: _getOrdersUseCase = getOrdersUseCase,
_getAcceptedAppsUseCase = getAcceptedAppsUseCase,
super(ViewOrdersState(selectedDate: DateTime.now())) {
}) : _getOrdersUseCase = getOrdersUseCase,
_getAcceptedAppsUseCase = getAcceptedAppsUseCase,
super(ViewOrdersState(selectedDate: DateTime.now())) {
_init();
}
@@ -36,30 +37,33 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
}) async {
final int requestId = ++_requestId;
emit(state.copyWith(status: ViewOrdersStatus.loading));
try {
final List<OrderItem> orders = await _getOrdersUseCase(
OrdersRangeArguments(start: rangeStart, end: rangeEnd),
);
final Map<String, List<Map<String, dynamic>>> apps = await _getAcceptedAppsUseCase(
OrdersDayArguments(day: dayForApps),
);
final List<OrderItem> updatedOrders = _applyApplications(orders, apps);
if (requestId != _requestId) {
return;
}
emit(
state.copyWith(
status: ViewOrdersStatus.success,
orders: updatedOrders,
),
);
_updateDerivedState();
} catch (_) {
if (requestId != _requestId) {
return;
}
emit(state.copyWith(status: ViewOrdersStatus.failure));
}
await handleError(
emit: (ViewOrdersState s) {
if (requestId == _requestId) emit(s);
},
action: () async {
final List<OrderItem> orders = await _getOrdersUseCase(
OrdersRangeArguments(start: rangeStart, end: rangeEnd),
);
final Map<String, List<Map<String, dynamic>>> apps =
await _getAcceptedAppsUseCase(OrdersDayArguments(day: dayForApps));
if (requestId != _requestId) {
return;
}
final List<OrderItem> updatedOrders = _applyApplications(orders, apps);
emit(
state.copyWith(
status: ViewOrdersStatus.success,
orders: updatedOrders,
),
);
_updateDerivedState();
},
onError: (String _) => state.copyWith(status: ViewOrdersStatus.failure),
);
}
void selectDate(DateTime date) {
@@ -78,7 +82,9 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
final DateTime? selectedDate = state.selectedDate;
final DateTime updatedSelectedDate =
selectedDate != null &&
calendarDays.any((DateTime day) => _isSameDay(day, selectedDate))
calendarDays.any(
(DateTime day) => _isSameDay(day, selectedDate),
)
? selectedDate
: calendarDays.first;
emit(
@@ -135,17 +141,21 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
}
Future<void> _refreshAcceptedApplications(DateTime day) async {
try {
final Map<String, List<Map<String, dynamic>>> apps = await _getAcceptedAppsUseCase(
OrdersDayArguments(day: day),
);
final List<OrderItem> updatedOrders =
_applyApplications(state.orders, apps);
emit(state.copyWith(orders: updatedOrders));
_updateDerivedState();
} catch (_) {
// Keep existing data on failure.
}
await handleErrorWithResult(
action: () async {
final Map<String, List<Map<String, dynamic>>> apps =
await _getAcceptedAppsUseCase(OrdersDayArguments(day: day));
final List<OrderItem> updatedOrders = _applyApplications(
state.orders,
apps,
);
emit(state.copyWith(orders: updatedOrders));
_updateDerivedState();
},
onError: (_) {
// Keep existing data on failure, just log error via handleErrorWithResult
},
);
}
List<OrderItem> _applyApplications(
@@ -153,7 +163,8 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
Map<String, List<Map<String, dynamic>>> apps,
) {
return orders.map((OrderItem order) {
final List<Map<String, dynamic>> confirmed = apps[order.id] ?? const <Map<String, dynamic>>[];
final List<Map<String, dynamic>> confirmed =
apps[order.id] ?? const <Map<String, dynamic>>[];
if (confirmed.isEmpty) {
return order;
}
@@ -209,9 +220,10 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
).format(state.selectedDate!);
// Filter by date
final List<OrderItem> ordersOnDate = state.orders
.where((OrderItem s) => s.date == selectedDateStr)
.toList();
final List<OrderItem> ordersOnDate =
state.orders
.where((OrderItem s) => s.date == selectedDateStr)
.toList();
// Sort by start time
ordersOnDate.sort(
@@ -219,30 +231,38 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
);
if (state.filterTab == 'all') {
final List<OrderItem> filtered = ordersOnDate
.where(
(OrderItem s) =>
// TODO(orders): move PENDING to its own tab once available.
<String>['OPEN', 'FILLED', 'CONFIRMED', 'PENDING', 'ASSIGNED']
.contains(s.status),
)
.toList();
final List<OrderItem> filtered =
ordersOnDate
.where(
(OrderItem s) =>
// TODO(orders): move PENDING to its own tab once available.
<String>[
'OPEN',
'FILLED',
'CONFIRMED',
'PENDING',
'ASSIGNED',
].contains(s.status),
)
.toList();
print(
'ViewOrders tab=all statuses=${ordersOnDate.map((OrderItem s) => s.status).toList()} filtered=${filtered.length}',
);
return filtered;
} else if (state.filterTab == 'active') {
final List<OrderItem> filtered = ordersOnDate
.where((OrderItem s) => s.status == 'IN_PROGRESS')
.toList();
final List<OrderItem> filtered =
ordersOnDate
.where((OrderItem s) => s.status == 'IN_PROGRESS')
.toList();
print(
'ViewOrders tab=active statuses=${ordersOnDate.map((OrderItem s) => s.status).toList()} filtered=${filtered.length}',
);
return filtered;
} else if (state.filterTab == 'completed') {
final List<OrderItem> filtered = ordersOnDate
.where((OrderItem s) => s.status == 'COMPLETED')
.toList();
final List<OrderItem> filtered =
ordersOnDate
.where((OrderItem s) => s.status == 'COMPLETED')
.toList();
print(
'ViewOrders tab=completed statuses=${ordersOnDate.map((OrderItem s) => s.status).toList()} filtered=${filtered.length}',
);
@@ -260,11 +280,17 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
if (category == 'active') {
return state.orders
.where((OrderItem s) => s.date == selectedDateStr && s.status == 'IN_PROGRESS')
.where(
(OrderItem s) =>
s.date == selectedDateStr && s.status == 'IN_PROGRESS',
)
.length;
} else if (category == 'completed') {
return state.orders
.where((OrderItem s) => s.date == selectedDateStr && s.status == 'COMPLETED')
.where(
(OrderItem s) =>
s.date == selectedDateStr && s.status == 'COMPLETED',
)
.length;
}
return 0;
@@ -281,9 +307,15 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
.where(
(OrderItem s) =>
s.date == selectedDateStr &&
<String>['OPEN', 'FILLED', 'CONFIRMED', 'PENDING', 'ASSIGNED']
.contains(s.status),
<String>[
'OPEN',
'FILLED',
'CONFIRMED',
'PENDING',
'ASSIGNED',
].contains(s.status),
)
.length;
}
}