feat(time_card): refactor TimeCardPage to use StatelessWidget and optimize Bloc initialization

feat(time_card): change GetTimeCardsUseCase to lazy singleton in StaffTimeCardModule
feat(clock_in): update use cases to lazy singleton in StaffClockInModule
This commit is contained in:
Achintha Isuru
2026-03-18 16:01:41 -04:00
parent f70bdc4fca
commit 18b74473dc
3 changed files with 34 additions and 47 deletions

View File

@@ -57,10 +57,10 @@ class StaffClockInModule extends Module {
); );
// Use Cases // Use Cases
i.add<GetTodaysShiftUseCase>(GetTodaysShiftUseCase.new); i.addLazySingleton<GetTodaysShiftUseCase>(GetTodaysShiftUseCase.new);
i.add<GetAttendanceStatusUseCase>(GetAttendanceStatusUseCase.new); i.addLazySingleton<GetAttendanceStatusUseCase>(GetAttendanceStatusUseCase.new);
i.add<ClockInUseCase>(ClockInUseCase.new); i.addLazySingleton<ClockInUseCase>(ClockInUseCase.new);
i.add<ClockOutUseCase>(ClockOutUseCase.new); i.addLazySingleton<ClockOutUseCase>(ClockOutUseCase.new);
// Validators // Validators
i.addLazySingleton<CompositeClockInValidator>( i.addLazySingleton<CompositeClockInValidator>(

View File

@@ -1,41 +1,26 @@
// 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:core_localization/core_localization.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:core_localization/core_localization.dart'; import 'package:staff_time_card/src/presentation/blocs/time_card_bloc.dart';
import 'package:design_system/design_system.dart'; import 'package:staff_time_card/src/presentation/widgets/month_selector.dart';
import 'package:krow_core/core.dart'; import 'package:staff_time_card/src/presentation/widgets/shift_history_list.dart';
import '../blocs/time_card_bloc.dart'; import 'package:staff_time_card/src/presentation/widgets/time_card_skeleton/time_card_skeleton.dart';
import '../widgets/month_selector.dart'; import 'package:staff_time_card/src/presentation/widgets/time_card_summary.dart';
import '../widgets/shift_history_list.dart';
import '../widgets/time_card_skeleton/time_card_skeleton.dart';
import '../widgets/time_card_summary.dart';
/// The main page for displaying the staff time card. /// The main page for displaying the staff time card.
class TimeCardPage extends StatefulWidget { class TimeCardPage extends StatelessWidget {
/// Creates a [TimeCardPage].
const TimeCardPage({super.key}); const TimeCardPage({super.key});
@override
State<TimeCardPage> createState() => _TimeCardPageState();
}
class _TimeCardPageState extends State<TimeCardPage> {
late final TimeCardBloc _bloc;
@override
void initState() {
super.initState();
_bloc = Modular.get<TimeCardBloc>();
_bloc.add(LoadTimeCards(DateTime.now()));
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final Translations t = Translations.of(context); final Translations t = Translations.of(context);
return Scaffold( return Scaffold(
appBar: UiAppBar(title: t.staff_time_card.title, showBackButton: true), appBar: UiAppBar(title: t.staff_time_card.title, showBackButton: true),
body: BlocProvider.value( body: BlocProvider<TimeCardBloc>.value(
value: _bloc, value: Modular.get<TimeCardBloc>()..add(LoadTimeCards(DateTime.now())),
child: BlocConsumer<TimeCardBloc, TimeCardState>( child: BlocConsumer<TimeCardBloc, TimeCardState>(
listener: (BuildContext context, TimeCardState state) { listener: (BuildContext context, TimeCardState state) {
if (state is TimeCardError) { if (state is TimeCardError) {
@@ -72,7 +57,8 @@ class _TimeCardPageState extends State<TimeCardPage> {
children: <Widget>[ children: <Widget>[
MonthSelector( MonthSelector(
selectedDate: state.selectedMonth, selectedDate: state.selectedMonth,
onPreviousMonth: () => _bloc.add( onPreviousMonth: () =>
ReadContext(context).read<TimeCardBloc>().add(
ChangeMonth( ChangeMonth(
DateTime( DateTime(
state.selectedMonth.year, state.selectedMonth.year,
@@ -80,7 +66,8 @@ class _TimeCardPageState extends State<TimeCardPage> {
), ),
), ),
), ),
onNextMonth: () => _bloc.add( onNextMonth: () =>
ReadContext(context).read<TimeCardBloc>().add(
ChangeMonth( ChangeMonth(
DateTime( DateTime(
state.selectedMonth.year, state.selectedMonth.year,

View File

@@ -30,7 +30,7 @@ class StaffTimeCardModule extends Module {
); );
// UseCases // UseCases
i.add<GetTimeCardsUseCase>(GetTimeCardsUseCase.new); i.addLazySingleton<GetTimeCardsUseCase>(GetTimeCardsUseCase.new);
// Blocs // Blocs
i.add<TimeCardBloc>(TimeCardBloc.new); i.add<TimeCardBloc>(TimeCardBloc.new);