assistant employee improvements

design_3.0_latest
Sikander Saleem 1 year ago
parent f20929b1dc
commit f3695b90fb

@ -34,7 +34,7 @@ class FirebaseNotificationManger {
h_push.Push.getTokenStream.listen((hToken) { h_push.Push.getTokenStream.listen((hToken) {
// onToken(token); // onToken(token);
print("Huawei Token: ${hToken}"); // print("Huawei Token: ${hToken}");
token = hToken; token = hToken;
}, onError: (e) { }, onError: (e) {
print( "Huawei TokenError"+e.toString()); print( "Huawei TokenError"+e.toString());
@ -57,7 +57,7 @@ class FirebaseNotificationManger {
} catch (ex) {} } catch (ex) {}
} }
} }
print("pushToken:$token"); //print("pushToken:$token");
} }
static void _onMessageReceived(h_push.RemoteMessage remoteMessage) { static void _onMessageReceived(h_push.RemoteMessage remoteMessage) {

@ -6,7 +6,6 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_model.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart'; import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
@ -22,7 +21,6 @@ class AssistantEmployeeCard extends StatefulWidget {
} }
class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> { class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
bool status = false; bool status = false;
final TextEditingController _workingHoursController = TextEditingController(text: ''); final TextEditingController _workingHoursController = TextEditingController(text: '');
bool isCurrentUserIsAssistantEmp = false; bool isCurrentUserIsAssistantEmp = false;
@ -57,147 +55,148 @@ class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<RequestDetailProvider>(builder: (context, requestDetailProvider, child) { return Consumer<RequestDetailProvider>(builder: (context, requestDetailProvider, child) {
return Column( return Column(
children: [ children: [
SizedBox( SizedBox(
height: 56.toScreenHeight, height: 56.toScreenHeight,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
context.translation.assistantEmployee.bodyText(context).custom(color: AppColor.black20), context.translation.assistantEmployee.bodyText(context).custom(color: AppColor.black20),
IconButton(onPressed: (){ Icon(isExpanded ? Icons.arrow_drop_up_outlined : Icons.arrow_drop_down),
setState(() { ],
isExpanded=!isExpanded; ),
}); ).onPress(() {
}, icon: Icon(isExpanded?Icons.arrow_drop_up_outlined:Icons.arrow_drop_down)), setState(() {
],), isExpanded = !isExpanded;
), });
isExpanded? Column( }),
crossAxisAlignment: CrossAxisAlignment.stretch, isExpanded
children: [ ? Column(
ServiceReportAssistantEmployeeMenu( crossAxisAlignment: CrossAxisAlignment.stretch,
title: context.translation.select, children: [
backgroundColor: AppColor.neutral100, ServiceReportAssistantEmployeeMenu(
assetId: requestDetailProvider.currentWorkOrder!.data!.asset!.id!, title: context.translation.select,
initialValue: (requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees?.isNotEmpty ?? false) backgroundColor: AppColor.neutral100,
? requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees?.first assetId: requestDetailProvider.currentWorkOrder!.data!.asset!.id!,
: null, initialValue: (requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees?.isNotEmpty ?? false)
//TODO add check... ? requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees?.first
// enable: !isCurrentUserIsAssistantEmp, : null,
onSelect: (employee) { //TODO add check...
print('on select called...${employee?.toJson()}'); // enable: !isCurrentUserIsAssistantEmp,
if (employee == null) { onSelect: (employee) {
requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees = []; print('on select called...${employee?.toJson()}');
} else { if (employee == null) {
requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees = [employee.copyWith(id: 0)]; requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees = [];
requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.user= AssignedEmployee(userId: employee.user?.id,userName:employee.user?.name ); } else {
requestDetailProvider.activityMaintenanceHelperModel?.assistantEmployees = [employee.copyWith(id: 0)];
} requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.user = AssignedEmployee(userId: employee.user?.id, userName: employee.user?.name);
},
),
8.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
ADatePicker(
label: context.translation.startTime,
hideShadow: true,
backgroundColor: AppColor.neutral100,
date: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate,
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).then((selectedTime) {
// Handle the selected date and time here.
if (selectedTime != null) {
DateTime selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
selectedTime.hour,
selectedTime.minute,
);
requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate = selectedDateTime;
requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel);
assignWorkingHours(requestDetailProvider: requestDetailProvider);
} }
}); },
}, ),
).expanded, 8.height,
8.width, Row(
ADatePicker( mainAxisSize: MainAxisSize.min,
label: context.translation.endTime, children: [
hideShadow: true, ADatePicker(
backgroundColor: AppColor.neutral100, label: context.translation.startTime,
date: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.endDate, hideShadow: true,
formatDateWithTime: true, backgroundColor: AppColor.neutral100,
onDatePicker: (selectedDate) { date: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate,
showTimePicker( formatDateWithTime: true,
context: context, onDatePicker: (selectedDate) {
initialTime: TimeOfDay.now(), showTimePicker(
).then((selectedTime) { context: context,
// Handle the selected date and time here. initialTime: TimeOfDay.now(),
if (selectedTime != null) { ).then((selectedTime) {
DateTime selectedDateTime = DateTime( // Handle the selected date and time here.
selectedDate.year, if (selectedTime != null) {
selectedDate.month, DateTime selectedDateTime = DateTime(
selectedDate.day, selectedDate.year,
selectedTime.hour, selectedDate.month,
selectedTime.minute, selectedDate.day,
); selectedTime.hour,
if (requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate != null && selectedTime.minute,
selectedDateTime.isBefore(requestDetailProvider.activityMaintenanceHelperModel!.modelAssistantEmployees!.startDate!)) { );
"End Date time must be greater then start date".showToast; requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate = selectedDateTime;
return; requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel);
} assignWorkingHours(requestDetailProvider: requestDetailProvider);
requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.endDate = selectedDateTime; }
requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); });
assignWorkingHours(requestDetailProvider: requestDetailProvider); },
} ).expanded,
}); 8.width,
}, ADatePicker(
).expanded, label: context.translation.endTime,
], hideShadow: true,
), backgroundColor: AppColor.neutral100,
8.height, date: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.endDate,
AppTextFormField( formatDateWithTime: true,
labelText: context.translation.workingHours, onDatePicker: (selectedDate) {
backgroundColor: AppColor.neutral80, showTimePicker(
controller: _workingHoursController, context: context,
suffixIcon: "clock".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null).paddingOnly(end: 16), initialTime: TimeOfDay.now(),
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.workingHours != null ).then((selectedTime) {
? requestDetailProvider.activityMaintenanceHelperModel!.modelAssistantEmployees!.workingHours.toString() // Handle the selected date and time here.
: '', if (selectedTime != null) {
textAlign: TextAlign.center, DateTime selectedDateTime = DateTime(
labelStyle: AppTextStyles.textFieldLabelStyle, selectedDate.year,
enable: false, selectedDate.month,
showShadow: false, selectedDate.day,
style: Theme.of(context).textTheme.titleMedium, selectedTime.hour,
), selectedTime.minute,
8.height, );
AppTextFormField( if (requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate != null &&
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.technicalComment, selectedDateTime.isBefore(requestDetailProvider.activityMaintenanceHelperModel!.modelAssistantEmployees!.startDate!)) {
labelText: context.translation.technicalComment, "End Date time must be greater then start date".showToast;
backgroundColor: AppColor.neutral100, return;
showShadow: false, }
labelStyle: AppTextStyles.textFieldLabelStyle, requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.endDate = selectedDateTime;
alignLabelWithHint: true, requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel);
textInputType: TextInputType.multiline, assignWorkingHours(requestDetailProvider: requestDetailProvider);
onChange: (value) { }
requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.technicalComment = value; });
}, },
onSaved: (value) { ).expanded,
requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.technicalComment = value; ],
}, ),
), 8.height,
8.height, AppTextFormField(
], labelText: context.translation.workingHours,
):const SizedBox(), backgroundColor: AppColor.neutral80,
controller: _workingHoursController,
suffixIcon: "clock".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null).paddingOnly(end: 16),
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.workingHours != null
? requestDetailProvider.activityMaintenanceHelperModel!.modelAssistantEmployees!.workingHours.toString()
: '',
textAlign: TextAlign.center,
labelStyle: AppTextStyles.textFieldLabelStyle,
enable: false,
showShadow: false,
style: Theme.of(context).textTheme.titleMedium,
),
8.height,
AppTextFormField(
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.technicalComment,
labelText: context.translation.technicalComment,
backgroundColor: AppColor.neutral100,
showShadow: false,
labelStyle: AppTextStyles.textFieldLabelStyle,
alignLabelWithHint: true,
textInputType: TextInputType.multiline,
onChange: (value) {
requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.technicalComment = value;
},
onSaved: (value) {
requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.technicalComment = value;
},
),
8.height,
],
)
: const SizedBox(),
], ],
); );
}); });
} }
@ -205,7 +204,7 @@ class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
double calculateWorkingHours(DateTime? startTime, DateTime? endTime) { double calculateWorkingHours(DateTime? startTime, DateTime? endTime) {
if (startTime != null && endTime != null) { if (startTime != null && endTime != null) {
Duration difference = endTime.difference(startTime); Duration difference = endTime.difference(startTime);
int hours = difference.inHours ; int hours = difference.inHours;
int minutes = difference.inMinutes % 60; int minutes = difference.inMinutes % 60;
return hours.toDouble(); return hours.toDouble();
} else { } else {

@ -1,26 +1,20 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_model.dart';
import 'package:test_sa/models/service_request/service_report.dart'; import 'package:test_sa/models/service_request/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/providers/service_request_providers/last_situation_provider.dart'; import 'package:test_sa/providers/service_request_providers/last_situation_provider.dart';
import 'package:test_sa/providers/work_order/activity_status_provider.dart'; import 'package:test_sa/providers/work_order/activity_status_provider.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/service_request_latest/views/forms/maintenance_request/components/assistant_employee_card.dart'; import 'package:test_sa/service_request_latest/views/forms/maintenance_request/components/assistant_employee_card.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../../../controllers/providers/api/status_drop_down/report/service_types_provider.dart'; import '../../../../../controllers/providers/api/status_drop_down/report/service_types_provider.dart';
import '../../../../../models/lookup.dart'; import '../../../../../models/lookup.dart';
@ -101,8 +95,10 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
showAsBottomSheet: true, showAsBottomSheet: true,
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.lastSituation, initialValue: requestDetailProvider.activityMaintenanceHelperModel?.lastSituation,
onSelect: (status) { onSelect: (status) {
requestDetailProvider.activityMaintenanceHelperModel?.lastSituation = status; if (status != null) {
setState(() {}); requestDetailProvider.activityMaintenanceHelperModel?.lastSituation = status;
setState(() {});
}
}, },
), ),
8.height, 8.height,

@ -1,131 +1,165 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/base.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart';
import '../../../models/new_models/assistant_employee.dart'; import '../../../models/new_models/assistant_employee.dart';
import '../../../new_views/app_style/app_color.dart'; import '../../../new_views/app_style/app_color.dart';
class AssistantEmployeeMenu extends StatefulWidget { class AssistantEmployeeMenu extends StatefulWidget {
final List<AssistantEmployees> statuses; final List<AssistantEmployees> statuses;
Color? backgroundColor; Color? backgroundColor;
final AssistantEmployees? initialStatus; // Now nullable final AssistantEmployees? initialStatus; // Now nullable
final Function(AssistantEmployees?) onSelect; // Now accepts nullable values final Function(AssistantEmployees?) onSelect; // Now accepts nullable values
final String? title; // Now nullable final String? title; // Now nullable
final bool enable; final bool enable;
final bool showAsBottomSheet;
AssistantEmployeeMenu({Key? key, required this.statuses, this.title, required this.onSelect, this.initialStatus,this.backgroundColor, this.enable = true}) : super(key: key); AssistantEmployeeMenu({Key? key, required this.statuses, this.title, this.showAsBottomSheet = false, required this.onSelect, this.initialStatus, this.backgroundColor, this.enable = true})
: super(key: key);
@override @override
_SingleAssistantEmployeeMenuState createState() => _SingleAssistantEmployeeMenuState(); _SingleAssistantEmployeeMenuState createState() => _SingleAssistantEmployeeMenuState();
} }
class _SingleAssistantEmployeeMenuState extends State<AssistantEmployeeMenu> {AssistantEmployees? _selectedStatus; // Now nullable class _SingleAssistantEmployeeMenuState extends State<AssistantEmployeeMenu> {
AssistantEmployees? _selectedStatus; // Now nullable
@override @override
void setState(VoidCallback fn) { void setState(VoidCallback fn) {
if (mounted) super.setState(fn); if (mounted) super.setState(fn);
} }
@override @override
void didUpdateWidget(covariant AssistantEmployeeMenu oldWidget) { void didUpdateWidget(covariant AssistantEmployeeMenu oldWidget) {
if (widget.initialStatus != null) { if (widget.initialStatus != null) {
final result = widget.statuses.where((element) => element.user?.id == widget.initialStatus?.user?.id); final result = widget.statuses.where((element) => element.user?.id == widget.initialStatus?.user?.id);
if (result.isNotEmpty) { if (result.isNotEmpty) {
_selectedStatus = result.first; _selectedStatus = result.first;
} else {
_selectedStatus = null;
}
if (widget.initialStatus?.user?.id != _selectedStatus?.user?.id) {
widget.onSelect(_selectedStatus);
}
} else { } else {
_selectedStatus = null; _selectedStatus = null;
} }
if (widget.initialStatus?.user?.id != _selectedStatus?.user?.id) { super.didUpdateWidget(oldWidget);
widget.onSelect(_selectedStatus);
}
} else {
_selectedStatus = null;
} }
super.didUpdateWidget(oldWidget);
}
@override @override
void initState() { void initState() {
if (widget.initialStatus != null) { if (widget.initialStatus != null) {
final result = widget.statuses.where((element) => element.user?.id == widget.initialStatus?.user?.id); final result = widget.statuses.where((element) => element.user?.id == widget.initialStatus?.user?.id);
if (result.isNotEmpty) { if (result.isNotEmpty) {
_selectedStatus = result.first; _selectedStatus = result.first;
} }
if (widget.initialStatus?.user?.id != _selectedStatus?.user?.id) { if (widget.initialStatus?.user?.id != _selectedStatus?.user?.id) {
widget.onSelect(_selectedStatus); widget.onSelect(_selectedStatus);
}
} }
super.initState();
} }
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
height: 60.toScreenHeight, height: 60.toScreenHeight,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
decoration: BoxDecoration( decoration: BoxDecoration(
color:widget.backgroundColor ?? (context.isDark ? AppColor.neutral50 : AppColor.neutral120), color: widget.backgroundColor ?? (context.isDark ? AppColor.neutral50 : AppColor.neutral120),
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),
child: Stack( child: Stack(
alignment: Alignment.center, alignment: Alignment.center,
children: [ children: [
PositionedDirectional( PositionedDirectional(
end: 0, end: 0,
child: Icon( child: Icon(
Icons.keyboard_arrow_down_rounded, Icons.keyboard_arrow_down_rounded,
color: widget.enable ? null : Colors.grey, color: widget.enable ? null : Colors.grey,
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (widget.title != null)
Text(
widget.title!, // Non-null assertion after null check
style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500),
),
DropdownButton<AssistantEmployees>(
value: _selectedStatus,
dropdownColor: AppColor.white10,
iconSize: 24,
isDense: true,
icon: const SizedBox.shrink(),
elevation: 0,
isExpanded: true,
hint: Text(
context.translation.select,
style: Theme.of(context).textTheme.bodyLarge,
),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.black20),
underline: const SizedBox.shrink(),
onChanged: widget.enable
? (AssistantEmployees? newValue) { // Now accepts nullable values
setState(() {
_selectedStatus = newValue;
});
widget.onSelect(newValue);
}
:null,
items: widget.statuses.map<DropdownMenuItem<AssistantEmployees>>(
(AssistantEmployees value) {
return DropdownMenuItem<AssistantEmployees>(
value: value,
child: Text(
value.user?.name ?? "NULL", // Use null-aware operator for user.name
style: AppTextStyles.bodyText.copyWith(color: AppColor.black20),
),
);
},
).toList(),
), ),
], ),
), Column(
], crossAxisAlignment: CrossAxisAlignment.start,
), mainAxisAlignment: MainAxisAlignment.center,
); children: [
if (widget.title != null)
Text(
widget.title!, // Non-null assertion after null check
style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500),
),
DropdownButton<AssistantEmployees>(
value: _selectedStatus,
dropdownColor: AppColor.white10,
iconSize: 24,
isDense: true,
icon: const SizedBox.shrink(),
elevation: 0,
isExpanded: true,
hint: Text(
context.translation.select,
style: Theme.of(context).textTheme.bodyLarge,
),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.black20),
underline: const SizedBox.shrink(),
onChanged: (widget.enable == false || widget.showAsBottomSheet)
? null
: (AssistantEmployees? newValue) {
// Now accepts nullable values
setState(() {
_selectedStatus = newValue;
});
widget.onSelect(newValue);
},
items: widget.statuses.map<DropdownMenuItem<AssistantEmployees>>(
(AssistantEmployees value) {
return DropdownMenuItem<AssistantEmployees>(
value: value,
child: Text(
value.user?.name ?? "NULL", // Use null-aware operator for user.name
style: AppTextStyles.bodyText.copyWith(color: AppColor.black20),
),
);
},
).toList(),
).onPress(widget.showAsBottomSheet
? () async {
final selectedT = await showModalBottomSheet<AssistantEmployees?>(
// Specify return type
context: context,
isScrollControlled: true,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(20),
),
),
clipBehavior: Clip.antiAliasWithSaveLayer,
builder: (BuildContext context) => SelectionBottomSheet<AssistantEmployees>(
items: widget.statuses,
selectedItem: _selectedStatus,
title: "Select",
builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name
),
);
if (selectedT != null) {
setState(() {
_selectedStatus = selectedT;
});
widget.onSelect(selectedT); // Non-null assertion after null check
}
}
: null),
],
),
],
),
);
}
} }
}

@ -14,7 +14,7 @@ class ServiceReportAssistantEmployeeMenu extends StatelessWidget {
final num assetId; final num assetId;
final bool enable; final bool enable;
ServiceReportAssistantEmployeeMenu({Key? key, required this.onSelect, required this.title, required this.initialValue, required this.assetId, this.backgroundColor, this.enable = true}) ServiceReportAssistantEmployeeMenu({Key? key, required this.onSelect, required this.title, required this.initialValue, required this.assetId, this.backgroundColor, this.enable = true})
: super(key: key); : super(key: key);
@override @override
@ -30,6 +30,7 @@ class ServiceReportAssistantEmployeeMenu extends StatelessWidget {
child: AssistantEmployeeMenu( child: AssistantEmployeeMenu(
initialStatus: initialValue, initialStatus: initialValue,
title: title, title: title,
showAsBottomSheet: true,
statuses: menuProvider.assistantEmployees ?? [], statuses: menuProvider.assistantEmployees ?? [],
backgroundColor: backgroundColor, backgroundColor: backgroundColor,
// Provide an empty list if null // Provide an empty list if null

Loading…
Cancel
Save