import 'package:coda_project/presentation/screens/notifications_screen.dart'; import 'package:coda_project/presentation/screens/user_settings_screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../widgets/finance_summary_card.dart'; import '../widgets/work_day_card.dart'; import '../widgets/settings_bar.dart'; import '../bloc/finance_bloc.dart'; import '../../core/di/injection_container.dart'; import '../../data/datasources/user_local_data_source.dart'; import '../../domain/models/finance_category.dart'; class FinanceScreen extends StatefulWidget { final void Function(bool isScrollingDown)? onScrollEvent; const FinanceScreen({super.key, this.onScrollEvent}); @override State createState() => _FinanceScreenState(); } class _FinanceScreenState extends State { FinanceCategory currentCategory = FinanceCategory.attendance; late ScrollController scrollController; String? _employeeId; @override void initState() { super.initState(); scrollController = ScrollController(); _loadInitialData(); } @override void dispose() { scrollController.dispose(); super.dispose(); } void _loadInitialData() async { _employeeId = await sl().getCachedEmployeeId(); if (mounted) { setState(() {}); } } void _triggerLoad(BuildContext context) { if (_employeeId != null && _employeeId!.isNotEmpty) { final bloc = context.read(); if (bloc.state is FinanceInitial) { bloc.add( LoadFinanceDataEvent( employeeId: _employeeId!, category: currentCategory, ), ); } } } @override Widget build(BuildContext context) { return BlocProvider( create: (context) => sl(), child: Directionality( textDirection: TextDirection.ltr, child: SafeArea( child: Builder( builder: (context) { // Trigger initial load when bloc is ready _triggerLoad(context); return CustomScrollView( controller: scrollController, physics: const BouncingScrollPhysics(), slivers: [ SliverToBoxAdapter( child: SettingsBar( selectedIndex: 0, showBackButton: false, iconPaths: const [ 'assets/images/user.svg', 'assets/images/ball.svg', ], onTap: (index) { if (index == 0) { Navigator.push( context, MaterialPageRoute( builder: (context) => const UserSettingsScreen(), ), ); } else if (index == 1) { Navigator.push( context, MaterialPageRoute( builder: (context) => const NotificationsScreen(), ), ); } }, ), ), const SliverToBoxAdapter(child: SizedBox(height: 5)), /// SUMMARY CARD SliverToBoxAdapter( child: FinanceSummaryCard( totalAmount: "333,000", currentCategory: currentCategory, onCalendarTap: () => showDatePicker( context: context, initialDate: DateTime.now(), firstDate: DateTime(2020), lastDate: DateTime(2030), ), onCategoryChanged: (category) { if (category != null) { setState(() => currentCategory = category); context.read().add( LoadFinanceDataEvent( employeeId: _employeeId ?? '', category: currentCategory, ), ); } }, ), ), /// DATA LIST BlocBuilder( builder: (context, state) { if (state is FinanceLoading || state is FinanceInitial) { return const SliverToBoxAdapter( child: Center( child: Padding( padding: EdgeInsets.all(20.0), child: CircularProgressIndicator(), ), ), ); } else if (state is FinanceLoaded) { if (state.records.isEmpty) { return const SliverToBoxAdapter( child: Center( child: Padding( padding: EdgeInsets.all(20.0), child: Text("لا توجد سجلات"), ), ), ); } return SliverList( delegate: SliverChildBuilderDelegate(( context, index, ) { return WorkDayCard(record: state.records[index]); }, childCount: state.records.length), ); } else if (state is FinanceError) { return SliverToBoxAdapter( child: Center( child: Padding( padding: EdgeInsets.all(20.0), child: Text( state.message, style: const TextStyle(color: Colors.red), textAlign: TextAlign.center, ), ), ), ); } return const SliverToBoxAdapter(child: SizedBox()); }, ), const SliverToBoxAdapter(child: SizedBox(height: 120)), ], ); }, ), ), ), ); } }