feat: add project name support in CustomAppBar and related screens for improved context
This commit is contained in:
parent
5c53a3f4be
commit
e9075dcdf5
@ -6,11 +6,13 @@ import 'package:on_field_work/helpers/widgets/my_text.dart';
|
||||
|
||||
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||
final String title;
|
||||
final String? projectName;
|
||||
final VoidCallback? onBackPressed;
|
||||
|
||||
const CustomAppBar({
|
||||
super.key,
|
||||
required this.title,
|
||||
this.projectName,
|
||||
this.onBackPressed,
|
||||
});
|
||||
|
||||
@ -51,21 +53,26 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||
|
||||
MySpacing.height(2),
|
||||
|
||||
// PROJECT NAME ROW (copied exactly)
|
||||
// PROJECT NAME ROW
|
||||
GetBuilder<ProjectController>(
|
||||
builder: (projectController) {
|
||||
final projectName =
|
||||
// NEW LOGIC — simple and safe
|
||||
final displayProjectName =
|
||||
projectName ??
|
||||
projectController.selectedProject?.name ??
|
||||
'Select Project';
|
||||
'Select Project';
|
||||
|
||||
return Row(
|
||||
children: [
|
||||
const Icon(Icons.work_outline,
|
||||
size: 14, color: Colors.grey),
|
||||
const Icon(
|
||||
Icons.work_outline,
|
||||
size: 14,
|
||||
color: Colors.grey,
|
||||
),
|
||||
MySpacing.width(4),
|
||||
Expanded(
|
||||
child: MyText.bodySmall(
|
||||
projectName,
|
||||
displayProjectName,
|
||||
fontWeight: 600,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
color: Colors.grey[700],
|
||||
|
||||
@ -13,8 +13,9 @@ import 'package:on_field_work/helpers/utils/permission_constants.dart';
|
||||
|
||||
class JobsTab extends StatefulWidget {
|
||||
final ScrollController scrollController;
|
||||
final String projectName;
|
||||
|
||||
const JobsTab({super.key, required this.scrollController});
|
||||
const JobsTab({super.key, required this.scrollController, required this.projectName});
|
||||
|
||||
@override
|
||||
_JobsTabState createState() => _JobsTabState();
|
||||
@ -165,11 +166,11 @@ class _JobsTabState extends State<JobsTab> {
|
||||
children: [
|
||||
AbsorbPointer(
|
||||
absorbing: controller.showArchivedJobs
|
||||
.value, // Disable interactions if archived
|
||||
.value,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
if (!controller.showArchivedJobs.value) {
|
||||
Get.to(() => JobDetailsScreen(jobId: job.id));
|
||||
Get.to(() => JobDetailsScreen(jobId: job.id , projectName : widget.projectName));
|
||||
}
|
||||
},
|
||||
child: Card(
|
||||
|
||||
@ -15,8 +15,9 @@ import 'package:on_field_work/view/service_project/jobs_tab.dart';
|
||||
|
||||
class ServiceProjectDetailsScreen extends StatefulWidget {
|
||||
final String projectId;
|
||||
final String? projectName;
|
||||
|
||||
const ServiceProjectDetailsScreen({super.key, required this.projectId});
|
||||
const ServiceProjectDetailsScreen({super.key, required this.projectId , this.projectName});
|
||||
|
||||
@override
|
||||
State<ServiceProjectDetailsScreen> createState() =>
|
||||
@ -415,6 +416,7 @@ class _ServiceProjectDetailsScreenState
|
||||
backgroundColor: const Color(0xFFF5F5F5),
|
||||
appBar: CustomAppBar(
|
||||
title: "Service Project Details",
|
||||
projectName: widget.projectName,
|
||||
onBackPressed: () => Get.toNamed('/dashboard/service-projects'),
|
||||
),
|
||||
body: SafeArea(
|
||||
@ -455,7 +457,7 @@ class _ServiceProjectDetailsScreenState
|
||||
controller: _tabController,
|
||||
children: [
|
||||
_buildProfileTab(),
|
||||
JobsTab(scrollController: _jobScrollController),
|
||||
JobsTab(scrollController: _jobScrollController, projectName: widget.projectName ?? '',),
|
||||
_buildTeamsTab(),
|
||||
],
|
||||
);
|
||||
|
||||
@ -21,7 +21,8 @@ import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
|
||||
|
||||
class JobDetailsScreen extends StatefulWidget {
|
||||
final String jobId;
|
||||
const JobDetailsScreen({super.key, required this.jobId});
|
||||
final String? projectName;
|
||||
const JobDetailsScreen({super.key, required this.jobId, this.projectName});
|
||||
|
||||
@override
|
||||
State<JobDetailsScreen> createState() => _JobDetailsScreenState();
|
||||
@ -752,11 +753,14 @@ class _JobDetailsScreenState extends State<JobDetailsScreen> with UIMixin {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final projectName = widget.projectName;
|
||||
return Scaffold(
|
||||
backgroundColor: const Color(0xFFF5F5F5),
|
||||
appBar: CustomAppBar(
|
||||
title: "Service Project Job Details",
|
||||
onBackPressed: () => Get.back()),
|
||||
title: "Job Details Screen",
|
||||
onBackPressed: () => Get.back(),
|
||||
projectName: projectName,
|
||||
),
|
||||
floatingActionButton: Obx(() => FloatingActionButton.extended(
|
||||
onPressed:
|
||||
isEditing.value ? _editJob : () => isEditing.value = true,
|
||||
|
||||
@ -50,7 +50,10 @@ class _ServiceProjectScreenState extends State<ServiceProjectScreen>
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
onTap: () {
|
||||
// Navigate to ServiceProjectDetailsScreen
|
||||
Get.to(() => ServiceProjectDetailsScreen(projectId: project.id));
|
||||
Get.to(() => ServiceProjectDetailsScreen(
|
||||
projectId: project.id,
|
||||
projectName: project.name,
|
||||
));
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 14),
|
||||
@ -196,6 +199,7 @@ class _ServiceProjectScreenState extends State<ServiceProjectScreen>
|
||||
backgroundColor: const Color(0xFFF5F5F5),
|
||||
appBar: CustomAppBar(
|
||||
title: "Service Projects",
|
||||
projectName: 'All Service Projects',
|
||||
onBackPressed: () => Get.toNamed('/dashboard'),
|
||||
),
|
||||
body: Column(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user