import 'package:cheminova/models/Daily_Task_Response.dart'; import 'package:cheminova/screens/Add_products_screen.dart'; import 'package:flutter/material.dart'; import 'package:cheminova/screens/visit_dealers_screen.dart'; import 'package:cheminova/screens/display_sales_screen.dart'; import 'package:cheminova/screens/update_inventory_screen.dart'; import 'package:cheminova/screens/collect_kyc_screen.dart'; import 'package:cheminova/widgets/common_app_bar.dart'; import 'package:cheminova/widgets/common_drawer.dart'; import 'package:cheminova/widgets/common_background.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import '../provider/daily_task_provider.dart'; class DailyTasksScreen extends StatefulWidget { const DailyTasksScreen({super.key}); @override State createState() => _DailyTasksScreenState(); } class _DailyTasksScreenState extends State { final List _tabTitles = ['NEW', 'PENDING', 'COMPLETED']; int _selectedTabIndex = 0; late DailyTaskProvider _dailyTaskProvider; @override void initState() { _dailyTaskProvider = DailyTaskProvider(); super.initState(); } @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => _dailyTaskProvider, child: Scaffold( extendBodyBehindAppBar: true, appBar: _buildAppBar(), drawer: const CommonDrawer(), body: CommonBackground( child: SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildCustomTabBar(), Expanded( child: _buildTaskList(_selectedTabIndex), ), ], ), ), ), )); } CommonAppBar _buildAppBar() { return CommonAppBar( backgroundColor: Colors.transparent, elevation: 0, actions: [ IconButton( onPressed: () => Navigator.pop(context), icon: Image.asset('assets/Back_attendance.png'), padding: const EdgeInsets.only(right: 20), ), ], title: const Text( 'Daily Tasks', style: TextStyle(color: Colors.black87, fontSize: 20), ), ); } Widget _buildCustomTabBar() { return Container( height: 60, margin: const EdgeInsets.symmetric(vertical: 16, horizontal: 8), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: List.generate(_tabTitles.length, (index) { return GestureDetector( onTap: () { setState(() => _selectedTabIndex = index); if (index == 0) { _dailyTaskProvider.getTask(type: 'New'); } else if (index == 1) { _dailyTaskProvider.getTask(type: 'Pending'); } else { _dailyTaskProvider.getTask(type: 'Completed'); } }, child: Container( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), decoration: BoxDecoration( gradient: _selectedTabIndex == index ? const LinearGradient( colors: [Color(0xff004791), Color(0xff1a73e8)], begin: Alignment.topLeft, end: Alignment.bottomRight, ) : null, color: _selectedTabIndex == index ? Colors.transparent : Colors.white, borderRadius: BorderRadius.circular(10), border: Border.all(color: Colors.black), boxShadow: [ if (_selectedTabIndex == index) BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 6, offset: const Offset(0, 4), ), ], ), child: Row( children: [ Icon( _getTabIcon(index), color: _selectedTabIndex == index ? Colors.white : Colors.black, ), const SizedBox(width: 8), Text( _tabTitles[index], style: TextStyle( color: _selectedTabIndex == index ? Colors.white : Colors.black, fontWeight: _selectedTabIndex == index ? FontWeight.bold : FontWeight.normal, ), ), ], ), ), ); }), ), ); } IconData _getTabIcon(int index) { switch (index) { case 0: return Icons.new_releases; case 1: return Icons.pending; case 2: return Icons.check_circle; default: return Icons.new_releases; } } Widget _buildTaskList(int tabIndex) { List tasks; switch (tabIndex) { case 0: tasks = _newTasks; break; case 1: tasks = _pendingTasks; break; case 2: tasks = _completedTasks; break; default: tasks = []; } return Consumer( builder: (context, value, child) => value.isLoading ? const Center(child: CircularProgressIndicator()) : ListView.separated( padding: const EdgeInsets.all(16), itemCount: _selectedTabIndex == 0 ? value.newTasksList.length : _selectedTabIndex == 1 ? value.pendingTasksList.length : value.completedTasksList.length, separatorBuilder: (context, index) => const SizedBox(height: 8), itemBuilder: (context, index) { final tasksList = tabIndex == 0 ? value.newTasksList : tabIndex == 1 ? value.pendingTasksList : value.completedTasksList; return _buildTaskCard(tasksList[index]); }, ), ); } Widget _buildTaskCard(Tasks tasksList) { return InkWell( onTap: () { if (tasksList.task == 'Collect KYC') { Navigator.push( context, MaterialPageRoute( builder: (context) => CollectKycScreen(id: tasksList.taskId ?? ''))); } else if (tasksList.task == 'REUPLOAD') { Navigator.push( context, MaterialPageRoute( builder: (context) => CollectKycScreen(id: tasksList.taskId ?? ''))); } else if (tasksList.task == 'Update Inventory Data') { Navigator.push( context, MaterialPageRoute( builder: (context) => AddProductsScreen( distributorType: tasksList.addedFor!, tradeName: tasksList.tradeName ?? '', pdRdId: tasksList.sId!))); } else if (tasksList.task == 'Update Sales Data') { Navigator.push( context, MaterialPageRoute( builder: (context) => const DisplaySalesScreen())); } else if (tasksList.task == 'Visit Dealers/Retailers') { Navigator.push( context, MaterialPageRoute( builder: (context) => const VisitDealersScreen())); } }, child: Card( color: Colors.white, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ListTile( leading: const Icon(Icons.task, color: Colors.blueAccent), title: Text(tasksList.task ?? '', style: const TextStyle( color: Colors.black87, fontWeight: FontWeight.w700, fontSize: 16, fontFamily: 'Anek')), trailing: const Icon(Icons.arrow_forward_ios, color: Colors.black87)), Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (tasksList.task?.toLowerCase() == 'collect kyc') Text('Note: ${tasksList.note}') else if (tasksList.task?.toLowerCase() == 'update inventory data') Text('Distributor: ${tasksList.addedFor ?? ""}'), if(tasksList.tradeName != null) Text('Trade Name: ${tasksList.tradeName ?? ""}'), if(tasksList.taskDueDate != null) Text('Due Date: ${DateFormat('dd/MM/yyyy').format(DateTime.parse(tasksList.taskDueDate!))}'), Text('Priority: ${tasksList.taskPriority}'), ], ), ), ], ), ), ); } final List _newTasks = [ KycTaskItem( 'Collect KYC Documents', const CollectKycScreen( id: '', ), 'Collect KYC documents from ABC Trader', DateFormat('dd/MM/yyyy').format(DateTime.now()).toString(), 'Priority'), KycTaskItem( 'REUPLOAD', const CollectKycScreen( id: '', ), 'Reupload Pan Car From Shiv Traders', DateFormat('dd/MM/yyyy').format(DateTime.now()).toString(), 'Priority'), KycTaskItem( 'REUPLOAD', const CollectKycScreen( id: '', ), 'Reupload Pan Car From Shiv Traders', DateFormat('dd/MM/yyyy').format(DateTime.now()).toString(), 'Priority'), // TaskItem('Update Inventory Data', const UpdateInventoryScreen()), ]; final List _pendingTasks = [ TaskItem('Update Sales Data', const DisplaySalesScreen()), TaskItem('Visit Dealers/Retailers', const VisitDealersScreen()), ]; final List _completedTasks = [ TaskItem('Completed Task 1', const Placeholder()), TaskItem('Completed Task 2', const Placeholder()), ]; } class TaskItem { final String title; final Widget screen; TaskItem(this.title, this.screen); } class KycTaskItem extends TaskItem { final String note; final String date; final String Low; KycTaskItem(super.title, super.screen, this.note, this.date, this.Low); }