|  |  |  | @ -24,6 +24,7 @@ import 'package:mohem_flutter_app/ui/chat/chat_detailed_screen.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/widgets/button/default_button.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:pull_to_refresh/pull_to_refresh.dart'; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class SearchEmployeeBottomSheet extends StatefulWidget { | 
		
	
		
			
				|  |  |  |  |   int? notificationID; | 
		
	
	
		
			
				
					|  |  |  | @ -47,6 +48,8 @@ class SearchEmployeeBottomSheet extends StatefulWidget { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> { | 
		
	
		
			
				|  |  |  |  |   TextEditingController username = TextEditingController(); | 
		
	
		
			
				|  |  |  |  |   ScrollController sc = ScrollController(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   String searchText = ""; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   List<String>? optionsList = [ | 
		
	
	
		
			
				
					|  |  |  | @ -62,6 +65,7 @@ class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   // Chat Items | 
		
	
		
			
				|  |  |  |  |   List<ChatUser>? chatUsersList = []; | 
		
	
		
			
				|  |  |  |  |   int pageNo = 1; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   int _selectedSearchIndex = 0; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -88,12 +92,16 @@ class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> { | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   void fetchChatUser({bool isNeedLoading = true}) async { | 
		
	
		
			
				|  |  |  |  |     if (pageNo == 1) | 
		
	
		
			
				|  |  |  |  |       chatUsersList = []; | 
		
	
		
			
				|  |  |  |  |     try { | 
		
	
		
			
				|  |  |  |  |       Utils.showLoading(context); | 
		
	
		
			
				|  |  |  |  |       chatUsersList = await ChatApiClient().getChatMemberFromSearch( | 
		
	
		
			
				|  |  |  |  |         searchText, | 
		
	
		
			
				|  |  |  |  |         int.parse(AppState().chatDetails!.response!.id.toString()), | 
		
	
		
			
				|  |  |  |  |       ); | 
		
	
		
			
				|  |  |  |  |       await ChatApiClient().getChatMemberFromSearch(searchText, AppState().chatDetails!.response!.id!, pageNo).then((ChatUserModel value) { | 
		
	
		
			
				|  |  |  |  |         print(value.response!.length); | 
		
	
		
			
				|  |  |  |  |         if (value.response != null) { | 
		
	
		
			
				|  |  |  |  |           chatUsersList = value.response; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       }); | 
		
	
		
			
				|  |  |  |  |       chatUsersList!.removeWhere((ChatUser element) => element.id == AppState().chatDetails!.response!.id); | 
		
	
		
			
				|  |  |  |  |       Utils.hideLoading(context); | 
		
	
		
			
				|  |  |  |  |       setState(() {}); | 
		
	
	
		
			
				
					|  |  |  | @ -107,232 +115,263 @@ class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> { | 
		
	
		
			
				|  |  |  |  |     return null; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   @override | 
		
	
		
			
				|  |  |  |  |   Widget build(BuildContext context) { | 
		
	
		
			
				|  |  |  |  |     return SizedBox( | 
		
	
		
			
				|  |  |  |  |       width: double.infinity, | 
		
	
		
			
				|  |  |  |  |       height: MediaQuery.of(context).size.height - 100, | 
		
	
		
			
				|  |  |  |  |       child: Column( | 
		
	
		
			
				|  |  |  |  |         children: [ | 
		
	
		
			
				|  |  |  |  |           Column( | 
		
	
		
			
				|  |  |  |  |             crossAxisAlignment: CrossAxisAlignment.start, | 
		
	
		
			
				|  |  |  |  |             children: [ | 
		
	
		
			
				|  |  |  |  |               widget.title.toText24(isBold: true), | 
		
	
		
			
				|  |  |  |  |               21.height, | 
		
	
		
			
				|  |  |  |  |               "Search".toText16(), | 
		
	
		
			
				|  |  |  |  |               11.height, | 
		
	
		
			
				|  |  |  |  |               Row( | 
		
	
		
			
				|  |  |  |  |                 children: [ | 
		
	
		
			
				|  |  |  |  |                   radioOption("Name", 0, _selectedSearchIndex), | 
		
	
		
			
				|  |  |  |  |                   radioOption("User Name", 1, _selectedSearchIndex), | 
		
	
		
			
				|  |  |  |  |                   radioOption("Email", 2, _selectedSearchIndex), | 
		
	
		
			
				|  |  |  |  |                 ], | 
		
	
		
			
				|  |  |  |  |               ), | 
		
	
		
			
				|  |  |  |  |               14.height, | 
		
	
		
			
				|  |  |  |  |               Row( | 
		
	
		
			
				|  |  |  |  |                 children: [ | 
		
	
		
			
				|  |  |  |  |                   DynamicTextFieldWidget( | 
		
	
		
			
				|  |  |  |  |                     "Search", | 
		
	
		
			
				|  |  |  |  |                     "Search By Username", | 
		
	
		
			
				|  |  |  |  |                     inputAction: TextInputAction.done, | 
		
	
		
			
				|  |  |  |  |                     suffixIconData: Icons.search, | 
		
	
		
			
				|  |  |  |  |                     onChange: (text) { | 
		
	
		
			
				|  |  |  |  |                       searchText = text; | 
		
	
		
			
				|  |  |  |  |                       setState(() {}); | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                   ).expanded, | 
		
	
		
			
				|  |  |  |  |                   IconButton( | 
		
	
		
			
				|  |  |  |  |                     constraints: const BoxConstraints(), | 
		
	
		
			
				|  |  |  |  |                     onPressed: () async { | 
		
	
		
			
				|  |  |  |  |                       await SystemChannels.textInput.invokeMethod('TextInput.hide'); | 
		
	
		
			
				|  |  |  |  |                       widget.fromChat ? fetchChatUser() : fetchUserByInput(); | 
		
	
		
			
				|  |  |  |  |                     }, | 
		
	
		
			
				|  |  |  |  |                     icon: const Icon(Icons.search), | 
		
	
		
			
				|  |  |  |  |                   ) | 
		
	
		
			
				|  |  |  |  |                 ], | 
		
	
		
			
				|  |  |  |  |               ), | 
		
	
		
			
				|  |  |  |  |               if (replacementList != null) | 
		
	
		
			
				|  |  |  |  |                 replacementList!.isEmpty | 
		
	
		
			
				|  |  |  |  |                     ? Utils.getNoDataWidget(context).expanded | 
		
	
		
			
				|  |  |  |  |                     : ListView( | 
		
	
		
			
				|  |  |  |  |                         physics: const BouncingScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                         padding: EdgeInsets.only(top: 21, bottom: 8), | 
		
	
		
			
				|  |  |  |  |                         children: [ | 
		
	
		
			
				|  |  |  |  |                           if (favouriteUserList?.isNotEmpty ?? false) ...[ | 
		
	
		
			
				|  |  |  |  |                             "Favorites".toText16(), | 
		
	
		
			
				|  |  |  |  |                             12.height, | 
		
	
		
			
				|  |  |  |  |                             ListView.separated( | 
		
	
		
			
				|  |  |  |  |                                 physics: const NeverScrollableScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                                 shrinkWrap: true, | 
		
	
		
			
				|  |  |  |  |                                 itemBuilder: (cxt, index) => employeeItemView(favouriteUserList![index]), | 
		
	
		
			
				|  |  |  |  |                                 separatorBuilder: (cxt, index) => Container( | 
		
	
		
			
				|  |  |  |  |                                       height: 1, | 
		
	
		
			
				|  |  |  |  |                                       color: MyColors.borderE3Color, | 
		
	
		
			
				|  |  |  |  |                                     ), | 
		
	
		
			
				|  |  |  |  |                                 itemCount: favouriteUserList?.length ?? 0), | 
		
	
		
			
				|  |  |  |  |                             12.height, | 
		
	
		
			
				|  |  |  |  |                           ], | 
		
	
		
			
				|  |  |  |  |                           if (nonFavouriteUserList?.isNotEmpty ?? false) ...[ | 
		
	
		
			
				|  |  |  |  |                             "Related".toText16(), | 
		
	
		
			
				|  |  |  |  |                             12.height, | 
		
	
		
			
				|  |  |  |  |                             ListView.separated( | 
		
	
		
			
				|  |  |  |  |                                 physics: const NeverScrollableScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                                 shrinkWrap: true, | 
		
	
		
			
				|  |  |  |  |                                 itemBuilder: (cxt, index) => employeeItemView(nonFavouriteUserList![index]), | 
		
	
		
			
				|  |  |  |  |                                 separatorBuilder: (cxt, index) => Container( | 
		
	
		
			
				|  |  |  |  |                                       height: 1, | 
		
	
		
			
				|  |  |  |  |                                       color: MyColors.borderE3Color, | 
		
	
		
			
				|  |  |  |  |                                     ), | 
		
	
		
			
				|  |  |  |  |                                 itemCount: nonFavouriteUserList?.length ?? 0), | 
		
	
		
			
				|  |  |  |  |                           ] | 
		
	
		
			
				|  |  |  |  |                         ], | 
		
	
		
			
				|  |  |  |  |                       ).expanded, | 
		
	
		
			
				|  |  |  |  |               if (widget.fromChat) | 
		
	
		
			
				|  |  |  |  |                 if (chatUsersList != null && widget.fromChat) | 
		
	
		
			
				|  |  |  |  |                   chatUsersList!.isEmpty | 
		
	
		
			
				|  |  |  |  |                       ? Column( | 
		
	
		
			
				|  |  |  |  |                           children: [ | 
		
	
		
			
				|  |  |  |  |                             20.height, | 
		
	
		
			
				|  |  |  |  |                             Utils.getNoDataWidget(context), | 
		
	
		
			
				|  |  |  |  |                           ], | 
		
	
		
			
				|  |  |  |  |                         ) | 
		
	
		
			
				|  |  |  |  |   void loadMoreChatUsers() async { | 
		
	
		
			
				|  |  |  |  |     try { | 
		
	
		
			
				|  |  |  |  |       await ChatApiClient().getChatMemberFromSearch(searchText, AppState().chatDetails!.response!.id!, pageNo).then((ChatUserModel value) { | 
		
	
		
			
				|  |  |  |  |         if (value.response != null) { | 
		
	
		
			
				|  |  |  |  |           chatUsersList!.addAll(value.response!); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       }); | 
		
	
		
			
				|  |  |  |  |       chatUsersList!.removeWhere((ChatUser element) => element.id == AppState().chatDetails!.response!.id); | 
		
	
		
			
				|  |  |  |  |     } catch (e) { | 
		
	
		
			
				|  |  |  |  |       Utils.hideLoading(context); | 
		
	
		
			
				|  |  |  |  |       Utils.handleException(e, context, null); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   void scrollListener() async { | 
		
	
		
			
				|  |  |  |  |     if (sc.position.pixels == | 
		
	
		
			
				|  |  |  |  |         sc.position.maxScrollExtent) { | 
		
	
		
			
				|  |  |  |  |       pageNo++; | 
		
	
		
			
				|  |  |  |  |       setState(() {}); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     @override | 
		
	
		
			
				|  |  |  |  |     void initState() { | 
		
	
		
			
				|  |  |  |  |       super.initState(); | 
		
	
		
			
				|  |  |  |  |       sc.addListener(scrollListener); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     @override | 
		
	
		
			
				|  |  |  |  |     Widget build(BuildContext context) { | 
		
	
		
			
				|  |  |  |  |       return SizedBox( | 
		
	
		
			
				|  |  |  |  |         width: double.infinity, | 
		
	
		
			
				|  |  |  |  |         height: MediaQuery | 
		
	
		
			
				|  |  |  |  |             .of(context) | 
		
	
		
			
				|  |  |  |  |             .size | 
		
	
		
			
				|  |  |  |  |             .height - 100, | 
		
	
		
			
				|  |  |  |  |         child: Column( | 
		
	
		
			
				|  |  |  |  |           children: [ | 
		
	
		
			
				|  |  |  |  |             Column( | 
		
	
		
			
				|  |  |  |  |               crossAxisAlignment: CrossAxisAlignment.start, | 
		
	
		
			
				|  |  |  |  |               children: [ | 
		
	
		
			
				|  |  |  |  |                 widget.title.toText24(isBold: true), | 
		
	
		
			
				|  |  |  |  |                 21.height, | 
		
	
		
			
				|  |  |  |  |                 "Search".toText16(), | 
		
	
		
			
				|  |  |  |  |                 11.height, | 
		
	
		
			
				|  |  |  |  |                 Row( | 
		
	
		
			
				|  |  |  |  |                   children: [ | 
		
	
		
			
				|  |  |  |  |                     radioOption("Name", 0, _selectedSearchIndex), | 
		
	
		
			
				|  |  |  |  |                     radioOption("User Name", 1, _selectedSearchIndex), | 
		
	
		
			
				|  |  |  |  |                     radioOption("Email", 2, _selectedSearchIndex), | 
		
	
		
			
				|  |  |  |  |                   ], | 
		
	
		
			
				|  |  |  |  |                 ), | 
		
	
		
			
				|  |  |  |  |                 14.height, | 
		
	
		
			
				|  |  |  |  |                 Row( | 
		
	
		
			
				|  |  |  |  |                   children: [ | 
		
	
		
			
				|  |  |  |  |                     DynamicTextFieldWidget( | 
		
	
		
			
				|  |  |  |  |                       "Search", | 
		
	
		
			
				|  |  |  |  |                       "Search By Username", | 
		
	
		
			
				|  |  |  |  |                       inputAction: TextInputAction.done, | 
		
	
		
			
				|  |  |  |  |                       suffixIconData: Icons.search, | 
		
	
		
			
				|  |  |  |  |                       onChange: (text) { | 
		
	
		
			
				|  |  |  |  |                         searchText = text; | 
		
	
		
			
				|  |  |  |  |                         setState(() {}); | 
		
	
		
			
				|  |  |  |  |                       }, | 
		
	
		
			
				|  |  |  |  |                     ).expanded, | 
		
	
		
			
				|  |  |  |  |                     IconButton( | 
		
	
		
			
				|  |  |  |  |                       constraints: const BoxConstraints(), | 
		
	
		
			
				|  |  |  |  |                       onPressed: () async { | 
		
	
		
			
				|  |  |  |  |                         await SystemChannels.textInput.invokeMethod('TextInput.hide'); | 
		
	
		
			
				|  |  |  |  |                         widget.fromChat ? fetchChatUser() : fetchUserByInput(); | 
		
	
		
			
				|  |  |  |  |                       }, | 
		
	
		
			
				|  |  |  |  |                       icon: const Icon(Icons.search), | 
		
	
		
			
				|  |  |  |  |                     ) | 
		
	
		
			
				|  |  |  |  |                   ], | 
		
	
		
			
				|  |  |  |  |                 ), | 
		
	
		
			
				|  |  |  |  |                 if (replacementList != null) | 
		
	
		
			
				|  |  |  |  |                   replacementList!.isEmpty | 
		
	
		
			
				|  |  |  |  |                       ? Utils | 
		
	
		
			
				|  |  |  |  |                       .getNoDataWidget(context) | 
		
	
		
			
				|  |  |  |  |                       .expanded | 
		
	
		
			
				|  |  |  |  |                       : ListView( | 
		
	
		
			
				|  |  |  |  |                           physics: const BouncingScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                           padding: const EdgeInsets.only( | 
		
	
		
			
				|  |  |  |  |                             top: 15, | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                           children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                             ListView.separated( | 
		
	
		
			
				|  |  |  |  |                               physics: const NeverScrollableScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                               shrinkWrap: true, | 
		
	
		
			
				|  |  |  |  |                               itemBuilder: (BuildContext cxt, int index) { | 
		
	
		
			
				|  |  |  |  |                                 return SizedBox( | 
		
	
		
			
				|  |  |  |  |                                   height: 55, | 
		
	
		
			
				|  |  |  |  |                                   child: ListTile( | 
		
	
		
			
				|  |  |  |  |                                     leading: Stack( | 
		
	
		
			
				|  |  |  |  |                                       children: [ | 
		
	
		
			
				|  |  |  |  |                                         SvgPicture.asset( | 
		
	
		
			
				|  |  |  |  |                                           "assets/images/user.svg", | 
		
	
		
			
				|  |  |  |  |                                           height: 48, | 
		
	
		
			
				|  |  |  |  |                                           width: 48, | 
		
	
		
			
				|  |  |  |  |                                         ), | 
		
	
		
			
				|  |  |  |  |                                         Positioned( | 
		
	
		
			
				|  |  |  |  |                                           right: 5, | 
		
	
		
			
				|  |  |  |  |                                           bottom: 1, | 
		
	
		
			
				|  |  |  |  |                                           child: Container( | 
		
	
		
			
				|  |  |  |  |                                             width: 10, | 
		
	
		
			
				|  |  |  |  |                                             height: 10, | 
		
	
		
			
				|  |  |  |  |                                             decoration: BoxDecoration( | 
		
	
		
			
				|  |  |  |  |                                               color: chatUsersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red, | 
		
	
		
			
				|  |  |  |  |                                               borderRadius: const BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |                                                 Radius.circular(10), | 
		
	
		
			
				|  |  |  |  |                                               ), | 
		
	
		
			
				|  |  |  |  |                                             ), | 
		
	
		
			
				|  |  |  |  |                                           ), | 
		
	
		
			
				|  |  |  |  |                                         ) | 
		
	
		
			
				|  |  |  |  |                                       ], | 
		
	
		
			
				|  |  |  |  |                     physics: const BouncingScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                     padding: EdgeInsets.only(top: 21, bottom: 8), | 
		
	
		
			
				|  |  |  |  |                     children: [ | 
		
	
		
			
				|  |  |  |  |                       if (favouriteUserList?.isNotEmpty ?? false) ...[ | 
		
	
		
			
				|  |  |  |  |                         "Favorites".toText16(), | 
		
	
		
			
				|  |  |  |  |                         12.height, | 
		
	
		
			
				|  |  |  |  |                         ListView.separated( | 
		
	
		
			
				|  |  |  |  |                             physics: const NeverScrollableScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                             shrinkWrap: true, | 
		
	
		
			
				|  |  |  |  |                             itemBuilder: (cxt, index) => employeeItemView(favouriteUserList![index]), | 
		
	
		
			
				|  |  |  |  |                             separatorBuilder: (cxt, index) => | 
		
	
		
			
				|  |  |  |  |                                 Container( | 
		
	
		
			
				|  |  |  |  |                                   height: 1, | 
		
	
		
			
				|  |  |  |  |                                   color: MyColors.borderE3Color, | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                             itemCount: favouriteUserList?.length ?? 0), | 
		
	
		
			
				|  |  |  |  |                         12.height, | 
		
	
		
			
				|  |  |  |  |                       ], | 
		
	
		
			
				|  |  |  |  |                       if (nonFavouriteUserList?.isNotEmpty ?? false) ...[ | 
		
	
		
			
				|  |  |  |  |                         "Related".toText16(), | 
		
	
		
			
				|  |  |  |  |                         12.height, | 
		
	
		
			
				|  |  |  |  |                         ListView.separated( | 
		
	
		
			
				|  |  |  |  |                             physics: const NeverScrollableScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                             shrinkWrap: true, | 
		
	
		
			
				|  |  |  |  |                             itemBuilder: (cxt, index) => employeeItemView(nonFavouriteUserList![index]), | 
		
	
		
			
				|  |  |  |  |                             separatorBuilder: (cxt, index) => | 
		
	
		
			
				|  |  |  |  |                                 Container( | 
		
	
		
			
				|  |  |  |  |                                   height: 1, | 
		
	
		
			
				|  |  |  |  |                                   color: MyColors.borderE3Color, | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                             itemCount: nonFavouriteUserList?.length ?? 0), | 
		
	
		
			
				|  |  |  |  |                       ] | 
		
	
		
			
				|  |  |  |  |                     ], | 
		
	
		
			
				|  |  |  |  |                   ).expanded, | 
		
	
		
			
				|  |  |  |  |                 if (widget.fromChat) | 
		
	
		
			
				|  |  |  |  |                   if (chatUsersList != null && widget.fromChat) | 
		
	
		
			
				|  |  |  |  |                     chatUsersList!.isEmpty | 
		
	
		
			
				|  |  |  |  |                         ? Column( | 
		
	
		
			
				|  |  |  |  |                       children: [ | 
		
	
		
			
				|  |  |  |  |                         20.height, | 
		
	
		
			
				|  |  |  |  |                         Utils.getNoDataWidget(context), | 
		
	
		
			
				|  |  |  |  |                       ], | 
		
	
		
			
				|  |  |  |  |                     ) | 
		
	
		
			
				|  |  |  |  |                         : ListView | 
		
	
		
			
				|  |  |  |  |                         .separated( | 
		
	
		
			
				|  |  |  |  |                       physics: const AlwaysScrollableScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                       controller: sc, | 
		
	
		
			
				|  |  |  |  |                       shrinkWrap: true, | 
		
	
		
			
				|  |  |  |  |                       itemBuilder: (BuildContext cxt, int index) { | 
		
	
		
			
				|  |  |  |  |                         return SizedBox( | 
		
	
		
			
				|  |  |  |  |                           height: 55, | 
		
	
		
			
				|  |  |  |  |                           child: ListTile( | 
		
	
		
			
				|  |  |  |  |                             leading: Stack( | 
		
	
		
			
				|  |  |  |  |                               children: [ | 
		
	
		
			
				|  |  |  |  |                                 SvgPicture.asset( | 
		
	
		
			
				|  |  |  |  |                                   "assets/images/user.svg", | 
		
	
		
			
				|  |  |  |  |                                   height: 48, | 
		
	
		
			
				|  |  |  |  |                                   width: 48, | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                                 Positioned( | 
		
	
		
			
				|  |  |  |  |                                   right: 5, | 
		
	
		
			
				|  |  |  |  |                                   bottom: 1, | 
		
	
		
			
				|  |  |  |  |                                   child: Container( | 
		
	
		
			
				|  |  |  |  |                                     width: 10, | 
		
	
		
			
				|  |  |  |  |                                     height: 10, | 
		
	
		
			
				|  |  |  |  |                                     decoration: BoxDecoration( | 
		
	
		
			
				|  |  |  |  |                                       color: chatUsersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red, | 
		
	
		
			
				|  |  |  |  |                                       borderRadius: const BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |                                         Radius.circular(10), | 
		
	
		
			
				|  |  |  |  |                                       ), | 
		
	
		
			
				|  |  |  |  |                                     ), | 
		
	
		
			
				|  |  |  |  |                                     title: (chatUsersList![index].userName ?? "").toText14(color: MyColors.darkTextColor), | 
		
	
		
			
				|  |  |  |  |                                     minVerticalPadding: 0, | 
		
	
		
			
				|  |  |  |  |                                     onTap: () { | 
		
	
		
			
				|  |  |  |  |                                       Navigator.pop(context); | 
		
	
		
			
				|  |  |  |  |                                       Navigator.pushNamed( | 
		
	
		
			
				|  |  |  |  |                                         context, | 
		
	
		
			
				|  |  |  |  |                                         AppRoutes.chatDetailed, | 
		
	
		
			
				|  |  |  |  |                                         arguments: ChatDetailedScreenParams(chatUsersList![index], true), | 
		
	
		
			
				|  |  |  |  |                                       ); | 
		
	
		
			
				|  |  |  |  |                                     }, | 
		
	
		
			
				|  |  |  |  |                                   ), | 
		
	
		
			
				|  |  |  |  |                                 ); | 
		
	
		
			
				|  |  |  |  |                               }, | 
		
	
		
			
				|  |  |  |  |                               separatorBuilder: (BuildContext context, int index) => const Padding( | 
		
	
		
			
				|  |  |  |  |                                 padding: EdgeInsets.only(right: 10, left: 70, bottom: 0, top: 0), | 
		
	
		
			
				|  |  |  |  |                                 child: Divider( | 
		
	
		
			
				|  |  |  |  |                                   color: Color(0xFFE5E5E5), | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                               ), | 
		
	
		
			
				|  |  |  |  |                               itemCount: chatUsersList?.length ?? 0, | 
		
	
		
			
				|  |  |  |  |                                 ) | 
		
	
		
			
				|  |  |  |  |                               ], | 
		
	
		
			
				|  |  |  |  |                             ), | 
		
	
		
			
				|  |  |  |  |                             12.height, | 
		
	
		
			
				|  |  |  |  |                           ], | 
		
	
		
			
				|  |  |  |  |                         ).expanded, | 
		
	
		
			
				|  |  |  |  |             ], | 
		
	
		
			
				|  |  |  |  |           ).paddingOnly(left: 21, right: 21, bottom: 0, top: 21).expanded, | 
		
	
		
			
				|  |  |  |  |           Container(width: double.infinity, height: 1, color: MyColors.lightGreyEFColor), | 
		
	
		
			
				|  |  |  |  |           DefaultButton( | 
		
	
		
			
				|  |  |  |  |             LocaleKeys.cancel.tr(), | 
		
	
		
			
				|  |  |  |  |             () { | 
		
	
		
			
				|  |  |  |  |               Navigator.pop(context); | 
		
	
		
			
				|  |  |  |  |             }, | 
		
	
		
			
				|  |  |  |  |             textColor: MyColors.grey3AColor, | 
		
	
		
			
				|  |  |  |  |             colors: const [ | 
		
	
		
			
				|  |  |  |  |               Color(0xffE6E6E6), | 
		
	
		
			
				|  |  |  |  |               Color(0xffE6E6E6), | 
		
	
		
			
				|  |  |  |  |             ], | 
		
	
		
			
				|  |  |  |  |           ).insideContainer | 
		
	
		
			
				|  |  |  |  |         ], | 
		
	
		
			
				|  |  |  |  |       ), | 
		
	
		
			
				|  |  |  |  |     ); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   Widget employeeItemView(ReplacementList replacement) { | 
		
	
		
			
				|  |  |  |  |     return InkWell( | 
		
	
		
			
				|  |  |  |  |       onTap: () { | 
		
	
		
			
				|  |  |  |  |         Navigator.pop(context); | 
		
	
		
			
				|  |  |  |  |         widget.onSelectEmployee(replacement); | 
		
	
		
			
				|  |  |  |  |       }, | 
		
	
		
			
				|  |  |  |  |       child: SizedBox( | 
		
	
		
			
				|  |  |  |  |         height: 50, | 
		
	
		
			
				|  |  |  |  |         child: Row( | 
		
	
		
			
				|  |  |  |  |           children: [ | 
		
	
		
			
				|  |  |  |  |             CircularAvatar( | 
		
	
		
			
				|  |  |  |  |               url: replacement.employeeImage ?? "", | 
		
	
		
			
				|  |  |  |  |               height: 30, | 
		
	
		
			
				|  |  |  |  |               width: 30, | 
		
	
		
			
				|  |  |  |  |               isImageBase64: true, | 
		
	
		
			
				|  |  |  |  |             ), | 
		
	
		
			
				|  |  |  |  |             16.width, | 
		
	
		
			
				|  |  |  |  |             Expanded( | 
		
	
		
			
				|  |  |  |  |               child: (replacement.employeeDisplayName ?? "").toText12(), | 
		
	
		
			
				|  |  |  |  |             ), | 
		
	
		
			
				|  |  |  |  |             Icon(Icons.star, size: 16, color: replacement.isFavorite! ? MyColors.yellowFavColor : MyColors.borderCEColor), | 
		
	
		
			
				|  |  |  |  |                             title: (chatUsersList![index].userName ?? "").toText14(color: MyColors.darkTextColor), | 
		
	
		
			
				|  |  |  |  |                             minVerticalPadding: 0, | 
		
	
		
			
				|  |  |  |  |                             onTap: () { | 
		
	
		
			
				|  |  |  |  |                               Navigator.pop(context); | 
		
	
		
			
				|  |  |  |  |                               Navigator.pushNamed( | 
		
	
		
			
				|  |  |  |  |                                 context, | 
		
	
		
			
				|  |  |  |  |                                 AppRoutes.chatDetailed, | 
		
	
		
			
				|  |  |  |  |                                 arguments: ChatDetailedScreenParams(chatUsersList![index], true), | 
		
	
		
			
				|  |  |  |  |                               ); | 
		
	
		
			
				|  |  |  |  |                             }, | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                         ); | 
		
	
		
			
				|  |  |  |  |                       }, | 
		
	
		
			
				|  |  |  |  |                       separatorBuilder: (BuildContext context, int index) => | 
		
	
		
			
				|  |  |  |  |                       const Padding( | 
		
	
		
			
				|  |  |  |  |                         padding: EdgeInsets.only(right: 10, left: 70, bottom: 0, top: 0), | 
		
	
		
			
				|  |  |  |  |                         child: Divider( | 
		
	
		
			
				|  |  |  |  |                           color: Color(0xFFE5E5E5), | 
		
	
		
			
				|  |  |  |  |                         ), | 
		
	
		
			
				|  |  |  |  |                       ), | 
		
	
		
			
				|  |  |  |  |                       itemCount: chatUsersList?.length ?? 0, | 
		
	
		
			
				|  |  |  |  |                     ) | 
		
	
		
			
				|  |  |  |  |                         .expanded, | 
		
	
		
			
				|  |  |  |  |               ], | 
		
	
		
			
				|  |  |  |  |             ) | 
		
	
		
			
				|  |  |  |  |                 .paddingOnly(left: 21, right: 21, bottom: 0, top: 21) | 
		
	
		
			
				|  |  |  |  |                 .expanded, | 
		
	
		
			
				|  |  |  |  |             Container(width: double.infinity, height: 1, color: MyColors.lightGreyEFColor), | 
		
	
		
			
				|  |  |  |  |             DefaultButton( | 
		
	
		
			
				|  |  |  |  |               LocaleKeys.cancel.tr(), | 
		
	
		
			
				|  |  |  |  |                   () { | 
		
	
		
			
				|  |  |  |  |                 Navigator.pop(context); | 
		
	
		
			
				|  |  |  |  |               }, | 
		
	
		
			
				|  |  |  |  |               textColor: MyColors.grey3AColor, | 
		
	
		
			
				|  |  |  |  |               colors: const [ | 
		
	
		
			
				|  |  |  |  |                 Color(0xffE6E6E6), | 
		
	
		
			
				|  |  |  |  |                 Color(0xffE6E6E6), | 
		
	
		
			
				|  |  |  |  |               ], | 
		
	
		
			
				|  |  |  |  |             ).insideContainer | 
		
	
		
			
				|  |  |  |  |           ], | 
		
	
		
			
				|  |  |  |  |         ), | 
		
	
		
			
				|  |  |  |  |       ), | 
		
	
		
			
				|  |  |  |  |     ); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |       ); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   Widget radioOption(String title, int value, int groupValue) { | 
		
	
		
			
				|  |  |  |  |     return Row( | 
		
	
		
			
				|  |  |  |  |       children: [ | 
		
	
		
			
				|  |  |  |  |         Container( | 
		
	
		
			
				|  |  |  |  |           width: 24, | 
		
	
		
			
				|  |  |  |  |           height: 24, | 
		
	
		
			
				|  |  |  |  |           decoration: BoxDecoration( | 
		
	
		
			
				|  |  |  |  |             color: Colors.transparent, | 
		
	
		
			
				|  |  |  |  |             border: Border.all(color: MyColors.borderColor, width: 1), | 
		
	
		
			
				|  |  |  |  |             borderRadius: const BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |               Radius.circular(100), | 
		
	
		
			
				|  |  |  |  |             ), | 
		
	
		
			
				|  |  |  |  |     Widget employeeItemView(ReplacementList replacement) { | 
		
	
		
			
				|  |  |  |  |       return InkWell( | 
		
	
		
			
				|  |  |  |  |         onTap: () { | 
		
	
		
			
				|  |  |  |  |           Navigator.pop(context); | 
		
	
		
			
				|  |  |  |  |           widget.onSelectEmployee(replacement); | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |         child: SizedBox( | 
		
	
		
			
				|  |  |  |  |           height: 50, | 
		
	
		
			
				|  |  |  |  |           child: Row( | 
		
	
		
			
				|  |  |  |  |             children: [ | 
		
	
		
			
				|  |  |  |  |               CircularAvatar( | 
		
	
		
			
				|  |  |  |  |                 url: replacement.employeeImage ?? "", | 
		
	
		
			
				|  |  |  |  |                 height: 30, | 
		
	
		
			
				|  |  |  |  |                 width: 30, | 
		
	
		
			
				|  |  |  |  |                 isImageBase64: true, | 
		
	
		
			
				|  |  |  |  |               ), | 
		
	
		
			
				|  |  |  |  |               16.width, | 
		
	
		
			
				|  |  |  |  |               Expanded( | 
		
	
		
			
				|  |  |  |  |                 child: (replacement.employeeDisplayName ?? "").toText12(), | 
		
	
		
			
				|  |  |  |  |               ), | 
		
	
		
			
				|  |  |  |  |               Icon(Icons.star, size: 16, color: replacement.isFavorite! ? MyColors.yellowFavColor : MyColors.borderCEColor), | 
		
	
		
			
				|  |  |  |  |             ], | 
		
	
		
			
				|  |  |  |  |           ), | 
		
	
		
			
				|  |  |  |  |           padding: const EdgeInsets.all(4), | 
		
	
		
			
				|  |  |  |  |           child: Container( | 
		
	
		
			
				|  |  |  |  |             width: double.infinity, | 
		
	
		
			
				|  |  |  |  |             height: double.infinity, | 
		
	
		
			
				|  |  |  |  |         ), | 
		
	
		
			
				|  |  |  |  |       ); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     Widget radioOption(String title, int value, int groupValue) { | 
		
	
		
			
				|  |  |  |  |       return Row( | 
		
	
		
			
				|  |  |  |  |         children: [ | 
		
	
		
			
				|  |  |  |  |           Container( | 
		
	
		
			
				|  |  |  |  |             width: 24, | 
		
	
		
			
				|  |  |  |  |             height: 24, | 
		
	
		
			
				|  |  |  |  |             decoration: BoxDecoration( | 
		
	
		
			
				|  |  |  |  |               color: value == groupValue ? MyColors.grey3AColor : Colors.transparent, | 
		
	
		
			
				|  |  |  |  |               color: Colors.transparent, | 
		
	
		
			
				|  |  |  |  |               border: Border.all(color: MyColors.borderColor, width: 1), | 
		
	
		
			
				|  |  |  |  |               borderRadius: const BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |                 Radius.circular(100), | 
		
	
		
			
				|  |  |  |  |               ), | 
		
	
		
			
				|  |  |  |  |             ), | 
		
	
		
			
				|  |  |  |  |             padding: const EdgeInsets.all(4), | 
		
	
		
			
				|  |  |  |  |             child: Container( | 
		
	
		
			
				|  |  |  |  |               width: double.infinity, | 
		
	
		
			
				|  |  |  |  |               height: double.infinity, | 
		
	
		
			
				|  |  |  |  |               decoration: BoxDecoration( | 
		
	
		
			
				|  |  |  |  |                 color: value == groupValue ? MyColors.grey3AColor : Colors.transparent, | 
		
	
		
			
				|  |  |  |  |                 borderRadius: const BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |                   Radius.circular(100), | 
		
	
		
			
				|  |  |  |  |                 ), | 
		
	
		
			
				|  |  |  |  |               ), | 
		
	
		
			
				|  |  |  |  |             ), | 
		
	
		
			
				|  |  |  |  |           ), | 
		
	
		
			
				|  |  |  |  |         ), | 
		
	
		
			
				|  |  |  |  |         9.width, | 
		
	
		
			
				|  |  |  |  |         title.toText12(color: MyColors.grey57Color) | 
		
	
		
			
				|  |  |  |  |       ], | 
		
	
		
			
				|  |  |  |  |     ).onPress(() { | 
		
	
		
			
				|  |  |  |  |       _selectedSearchIndex = value; | 
		
	
		
			
				|  |  |  |  |       setState(() {}); | 
		
	
		
			
				|  |  |  |  |     }).expanded; | 
		
	
		
			
				|  |  |  |  |           9.width, | 
		
	
		
			
				|  |  |  |  |           title.toText12(color: MyColors.grey57Color) | 
		
	
		
			
				|  |  |  |  |         ], | 
		
	
		
			
				|  |  |  |  |       ).onPress(() { | 
		
	
		
			
				|  |  |  |  |         _selectedSearchIndex = value; | 
		
	
		
			
				|  |  |  |  |         setState(() {}); | 
		
	
		
			
				|  |  |  |  |       }).expanded; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					|  |  |  | 
 |