import 'package:flutter/material.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart'; import '../../../models/new_models/assistant_employee.dart'; import '../../../new_views/app_style/app_color.dart'; class AssistantEmployeeMenu extends StatefulWidget { final List statuses; Color? backgroundColor; final AssistantEmployees? initialStatus; // Now nullable final Function(AssistantEmployees?) onSelect; // Now accepts nullable values final String? title; // Now nullable final bool enable; final bool showAsBottomSheet; final bool hideShadow; AssistantEmployeeMenu( {Key? key, required this.statuses, this.title, this.showAsBottomSheet = false, this.hideShadow = false, required this.onSelect, this.initialStatus, this.backgroundColor, this.enable = true}) : super(key: key); @override _SingleAssistantEmployeeMenuState createState() => _SingleAssistantEmployeeMenuState(); } class _SingleAssistantEmployeeMenuState extends State { AssistantEmployees? _selectedStatus; // Now nullable @override void setState(VoidCallback fn) { if (mounted) super.setState(fn); } @override void didUpdateWidget(covariant AssistantEmployeeMenu oldWidget) { if (widget.initialStatus != null) { final result = widget.statuses.where((element) => element.user?.id == widget.initialStatus?.user?.id); if (result.isNotEmpty) { _selectedStatus = result.first; } else { _selectedStatus = null; } if (widget.initialStatus?.user?.id != _selectedStatus?.user?.id) { widget.onSelect(_selectedStatus); } } else { _selectedStatus = null; } super.didUpdateWidget(oldWidget); } @override void initState() { if (widget.initialStatus != null) { final result = widget.statuses.where((element) => element.user?.id == widget.initialStatus?.user?.id); if (result.isNotEmpty) { _selectedStatus = result.first; } if (widget.initialStatus?.user?.id != _selectedStatus?.user?.id) { widget.onSelect(_selectedStatus); } } super.initState(); } @override Widget build(BuildContext context) { return Container( height: 60.toScreenHeight, padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth), decoration: BoxDecoration( color: widget.backgroundColor ?? (context.isDark ? AppColor.neutral50 : AppColor.neutral120), borderRadius: BorderRadius.circular(10), boxShadow: widget.hideShadow ? null : [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], ), child: Stack( alignment: Alignment.center, children: [ PositionedDirectional( end: 0, child: Icon( Icons.keyboard_arrow_down_rounded, 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( 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>( (AssistantEmployees value) { return DropdownMenuItem( value: value, child: Text( value.user?.name ?? "NULL", // Use null-aware operator for user.name // style: AppTextStyles.bodyText.copyWith(color: AppColor.black20), style: Theme.of(context).textTheme.bodyMedium?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.white10 : AppColor.black10), ), ); }, ).toList(), ).onPress(widget.showAsBottomSheet ? () async { final selectedT = await showModalBottomSheet( // Specify return type context: context, isScrollControlled: true, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.vertical( top: Radius.circular(20), ), ), clipBehavior: Clip.antiAliasWithSaveLayer, builder: (BuildContext context) => SelectionBottomSheet( items: widget.statuses, selectedItem: _selectedStatus, title: "Select", showCancel: true, onSelect: (selectedT) { setState(() { _selectedStatus = selectedT; }); widget.onSelect(selectedT); }, 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), ], ), ], ), ); } }