sc-android-app/lib/screens/Update_inventorytask_screen.dart
2024-10-14 17:16:10 +05:30

161 lines
5.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:cheminova/models/Daily_Task_Response.dart';
import 'package:cheminova/widgets/common_app_bar.dart';
import 'package:cheminova/widgets/common_background.dart';
import 'package:cheminova/widgets/common_drawer.dart';
import '../constants/constant.dart';
import '../provider/daily_task_provider.dart';
import 'Add_products_screen.dart';
class UpdateInventoryTaskScreen extends StatefulWidget {
const UpdateInventoryTaskScreen({super.key});
@override
_UpdateInventoryTaskScreenState createState() => _UpdateInventoryTaskScreenState();
}
class _UpdateInventoryTaskScreenState extends State<UpdateInventoryTaskScreen> {
late DailyTaskProvider _dailyTaskProvider; // Provider to manage daily tasks
@override
void initState() {
super.initState();
_dailyTaskProvider = DailyTaskProvider(); // Initialize the provider
apiCall(); // Fetch tasks from the API
}
// Function to fetch new and pending tasks
void apiCall() async {
await _dailyTaskProvider.getTask(type: 'New', isAddPending: true); // Get new tasks
await _dailyTaskProvider.getTask(type: 'Pending', isAddPending: true); // Get pending tasks
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => _dailyTaskProvider, // Provide the DailyTaskProvider to the widget tree
child: Scaffold(
extendBodyBehindAppBar: true, // Extend the body behind the app bar
appBar: _buildAppBar(), // Build the app bar
drawer: const CommonDrawer(), // Navigation drawer
body: CommonBackground(
child: SafeArea(
child: _buildTaskList(), // Build the list of tasks
),
),
),
);
}
// Function to build the app bar
CommonAppBar _buildAppBar() {
return CommonAppBar(
backgroundColor: Colors.transparent, // Transparent background for app bar
elevation: 0, // No shadow for app bar
actions: [
// Back button in the app bar
IconButton(
onPressed: () => Navigator.pop(context), // Navigate back
icon: Image.asset('assets/Back_attendance.png'),
padding: const EdgeInsets.only(right: 20),
),
],
title: const Text(
'Inventory Update Tasks',
style: TextStyle(color: Colors.black87, fontSize: 20), // Title style
),
);
}
// Function to build the task list
Widget _buildTaskList() {
return Consumer<DailyTaskProvider>(
builder: (context, value, child) {
// Show loading indicator while fetching tasks
if (value.isLoading) {
return const Center(child: CircularProgressIndicator());
}
// Filter tasks that require inventory updates
final inventoryTasks = value.newTasksList
.where((task) => task.task?.toLowerCase() == 'update inventory data')
.toList();
// Show message if there are no inventory tasks
if (inventoryTasks.isEmpty) {
return const Center(
child: Text(
'NO TASK',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.black87,
),
),
);
}
// Build the list view for inventory tasks
return ListView.separated(
padding: const EdgeInsets.all(16),
itemCount: inventoryTasks.length, // Number of tasks to display
separatorBuilder: (context, index) => const SizedBox(height: 8), // Space between items
itemBuilder: (context, index) => _buildTaskCard(inventoryTasks[index]), // Build each task card
);
},
);
}
// Function to build an individual task card
Widget _buildTaskCard(Tasks tasksList) {
return InkWell(
onTap: () {
// Navigate to AddProductsScreen when a task card is tapped
if (tasksList.sId != null && tasksList.addedFor != null) {
Navigator.push(
navigatorKey.currentContext!,
MaterialPageRoute(
builder: (context) => AddProductsScreen(
distributorType: tasksList.addedFor!, // Pass distributor type
inventoryId: tasksList.sId!, // Pass inventory ID
tradeName: tasksList.tradeName ?? '', // Pass trader name
pdRdId: tasksList.addedForId!, // Pass PD/RD ID
),
),
);
}
},
child: Card(
color: Colors.white, // Card color
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), // Card shape
child: ListTile(
leading: const Icon(Icons.inventory, color: Colors.blueAccent), // Leading icon
title: Text(
tasksList.task ?? '', // Task name
style: const TextStyle(
color: Colors.black87,
fontWeight: FontWeight.w700,
fontSize: 16,
fontFamily: 'Anek', // Font style
),
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start, // Align subtitles to the start
children: [
Text('Distributor: ${tasksList.addedFor ?? ""}'), // Display distributor name
Text('Trader Name: ${tasksList.tradeName ?? ''}'), // Display trader name
// Display due date if it exists
if (tasksList.taskDueDate != null)
Text('Due Date: ${DateFormat('dd/MM/yyyy').format(DateTime.parse(tasksList.taskDueDate!))}'),
Text('Priority: ${tasksList.taskPriority}'), // Display task priority
],
),
trailing: const Icon(Icons.arrow_forward_ios, color: Colors.black87), // Trailing icon
),
),
);
}
}