You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			624 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			624 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Dart
		
	
| import 'package:easy_localization/easy_localization.dart';
 | |
| import 'package:flutter/cupertino.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter/rendering.dart';
 | |
| import 'package:flutter/services.dart';
 | |
| import 'package:flutter_svg/flutter_svg.dart';
 | |
| import 'package:mohem_flutter_app/api/chat/chat_api_client.dart';
 | |
| import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
 | |
| import 'package:mohem_flutter_app/app_state/app_state.dart';
 | |
| import 'package:mohem_flutter_app/classes/colors.dart';
 | |
| import 'package:mohem_flutter_app/classes/utils.dart';
 | |
| import 'package:mohem_flutter_app/config/routes.dart';
 | |
| import 'package:mohem_flutter_app/extensions/int_extensions.dart';
 | |
| import 'package:mohem_flutter_app/extensions/string_extensions.dart';
 | |
| import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
 | |
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
 | |
| import 'package:mohem_flutter_app/main.dart';
 | |
| import 'package:mohem_flutter_app/models/chat/create_group_request.dart';
 | |
| import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart';
 | |
| import 'package:mohem_flutter_app/models/chat/get_user_groups_by_id.dart' as groups;
 | |
| import 'package:mohem_flutter_app/models/get_action_history_list_model.dart';
 | |
| import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
 | |
| import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
 | |
| import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
 | |
| 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:provider/provider.dart';
 | |
| 
 | |
| class CreateGroupBottomSheet extends StatefulWidget {
 | |
|   int? notificationID;
 | |
|   String title, apiMode;
 | |
|   List<GetActionHistoryList>? actionHistoryList;
 | |
|   Function(ReplacementList) onSelectEmployee;
 | |
|   bool fromChat;
 | |
|   groups.GroupResponse groupDetails;
 | |
| 
 | |
|   CreateGroupBottomSheet({
 | |
|     Key? key,
 | |
|     required this.title,
 | |
|     required this.apiMode,
 | |
|     this.notificationID,
 | |
|     this.actionHistoryList,
 | |
|     required this.onSelectEmployee,
 | |
|     required this.fromChat,
 | |
|     required this.groupDetails,
 | |
|   }) : super(key: key);
 | |
| 
 | |
|   @override
 | |
|   State<CreateGroupBottomSheet> createState() => _CreateGroupBottomSheetState();
 | |
| }
 | |
| 
 | |
| class _CreateGroupBottomSheetState extends State<CreateGroupBottomSheet> {
 | |
|   TextEditingController username = TextEditingController();
 | |
|   ScrollController sc = ScrollController();
 | |
|   bool isAudioCall = true;
 | |
|   bool isVideoCall = true;
 | |
|   bool isAttachments = true;
 | |
|   bool isShareScreen = true;
 | |
|   String searchText = "";
 | |
|   String groupName = "";
 | |
|   List<String>? optionsList = [
 | |
|     LocaleKeys.fullName.tr(),
 | |
|     LocaleKeys.username.tr(),
 | |
|     LocaleKeys.endDate.tr(),
 | |
|   ];
 | |
|   List<GetFavoriteReplacements>? favUsersList;
 | |
| 
 | |
|   List<ReplacementList>? replacementList;
 | |
|   List<ReplacementList>? favouriteUserList;
 | |
|   List<ReplacementList>? nonFavouriteUserList;
 | |
| 
 | |
|   // Chat Items
 | |
|   late ChatProviderModel provider;
 | |
| 
 | |
|   int _selectedSearchIndex = 0;
 | |
|   List<ChatUser> selectedUsers = [];
 | |
| 
 | |
|   void fetchUserByInput({bool isNeedLoading = true}) async {
 | |
|     try {
 | |
|       Utils.showLoading(context);
 | |
|       replacementList = await WorkListApiClient().searchUserByInput(
 | |
|         userName: _selectedSearchIndex == 0 ? searchText : "",
 | |
|         userId: _selectedSearchIndex == 1 ? searchText : "",
 | |
|         email: _selectedSearchIndex == 2 ? searchText : "",
 | |
|       );
 | |
|       favouriteUserList = replacementList?.where((ReplacementList element) => element.isFavorite ?? false).toList();
 | |
|       nonFavouriteUserList = replacementList?.where((ReplacementList element) => !(element.isFavorite ?? false)).toList();
 | |
|       Utils.hideLoading(context);
 | |
|       setState(() {});
 | |
|     } catch (e) {
 | |
|       Utils.hideLoading(context);
 | |
|       Utils.handleException(e, context, null);
 | |
|     }
 | |
| 
 | |
|     if (isNeedLoading) Utils.hideLoading(context);
 | |
|     setState(() {});
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   void fetchChatUser({bool isNeedLoading = true}) async {
 | |
|     if (provider.pageNo == 1) provider.chatUsersList!.clear();
 | |
|     try {
 | |
|       Utils.showLoading(context);
 | |
|       await ChatApiClient().getChatMemberFromSearch(searchText, AppState().chatDetails!.response!.id!, provider.pageNo).then((ChatUserModel value) {
 | |
|         if (value.response != null) {
 | |
|           if (provider.pageNo == 1) {
 | |
|             provider.chatUsersList = value.response;
 | |
|           } else {
 | |
|             print("--------------------------Added More----------------------");
 | |
|             provider.chatUsersList!.addAll(value.response!);
 | |
|           }
 | |
|         }
 | |
|       });
 | |
|       provider.chatUsersList!.removeWhere((ChatUser element) => element.id == AppState().chatDetails!.response!.id);
 | |
|       Utils.hideLoading(context);
 | |
|       setState(() {});
 | |
|     } catch (e) {
 | |
|       Utils.hideLoading(context);
 | |
|       Utils.handleException(e, context, null);
 | |
|     }
 | |
|     if (isNeedLoading) Utils.hideLoading(context);
 | |
|     setState(() {});
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   void scrollListener() async {
 | |
|     if (sc.position.pixels == sc.position.maxScrollExtent) {
 | |
|       provider.pageNo++;
 | |
|       logger.w(provider.chatUsersList!.length);
 | |
|       logger.w(provider.pageNo);
 | |
|       fetchChatUser();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     super.initState();
 | |
|     sc.addListener(scrollListener);
 | |
|     provider = Provider.of<ChatProviderModel>(context, listen: false);
 | |
|     if (widget.groupDetails.groupName != null) {
 | |
|       setState(() {
 | |
|         groupName = widget.groupDetails.groupName!;
 | |
|         isAudioCall = widget.groupDetails.canAudioC!;
 | |
|         isVideoCall = widget.groupDetails.canVideoC!;
 | |
|         isAttachments = widget.groupDetails.canAttach!;
 | |
|         isShareScreen = widget.groupDetails.canShareS!;
 | |
|         for (groups.GroupUserList items in widget.groupDetails.groupUserList!) {
 | |
|           {
 | |
|             selectedUsers.add(ChatUser.fromJson(items.toJson()));
 | |
|           }
 | |
|         }
 | |
|       });
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     super.dispose();
 | |
|     provider.chatUsersList = [];
 | |
|     provider.pageNo = 1;
 | |
|   }
 | |
| 
 | |
|   @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,
 | |
|               Row(
 | |
|                 children: [
 | |
|                   DynamicTextFieldWidget(
 | |
|                     LocaleKeys.groupName.tr(),
 | |
|                     groupName.isEmpty ? LocaleKeys.enterGroupNamePlease.tr() : groupName,
 | |
|                     inputAction: TextInputAction.done,
 | |
|                     onChange: (String text) {
 | |
|                       groupName = text;
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ).expanded,
 | |
|                 ],
 | |
|               ),
 | |
| 
 | |
|               //11.height,
 | |
|               Row(
 | |
|                 children: [
 | |
|                   SizedBox(
 | |
|                       height: 35,
 | |
|                       child: CheckboxListTile(
 | |
|                         contentPadding: EdgeInsets.zero,
 | |
|                         title: LocaleKeys.audioCall.tr().toText10(),
 | |
| 
 | |
|                         checkboxShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
 | |
|                         side: BorderSide(width: 1.5, color: Theme.of(context).unselectedWidgetColor),
 | |
| 
 | |
|                         value: isAudioCall,
 | |
|                         onChanged: (bool? newValue) {
 | |
|                           setState(() {
 | |
|                             isAudioCall = newValue!;
 | |
|                           });
 | |
|                         },
 | |
|                         controlAffinity: ListTileControlAffinity.leading, //  <-- leading Checkbox
 | |
|                       )).expanded,
 | |
|                   SizedBox(
 | |
|                       height: 35,
 | |
|                       child: CheckboxListTile(
 | |
|                         contentPadding: EdgeInsets.zero,
 | |
|                         title: LocaleKeys.videoCall.tr().toText10(),
 | |
|                         checkboxShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
 | |
|                         value: isVideoCall,
 | |
|                         onChanged: (bool? newValue) {
 | |
|                           setState(() {
 | |
|                             isVideoCall = newValue!;
 | |
|                           });
 | |
|                         },
 | |
|                         controlAffinity: ListTileControlAffinity.leading, //  <-- leading Checkbox
 | |
|                       )).expanded
 | |
|                 ],
 | |
|               ),
 | |
|               Row(
 | |
|                 children: [
 | |
|                   SizedBox(
 | |
|                       height: 35,
 | |
|                       child: CheckboxListTile(
 | |
|                         contentPadding: EdgeInsets.zero,
 | |
|                         title: LocaleKeys.attachments.tr().toText10(),
 | |
|                         checkboxShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
 | |
|                         value: isAttachments,
 | |
|                         onChanged: (bool? newValue) {
 | |
|                           setState(() {
 | |
|                             isAttachments = newValue!;
 | |
|                           });
 | |
|                         },
 | |
|                         controlAffinity: ListTileControlAffinity.leading, //  <-- leading Checkbox
 | |
|                       )).expanded,
 | |
|                   SizedBox(
 | |
|                       height: 35,
 | |
|                       child: CheckboxListTile(
 | |
|                         contentPadding: EdgeInsets.zero,
 | |
|                         checkboxShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
 | |
|                         title: LocaleKeys.shareScreen.tr().toText10(),
 | |
|                         value: isShareScreen,
 | |
|                         onChanged: (bool? newValue) {
 | |
|                           setState(() {
 | |
|                             isShareScreen = newValue!;
 | |
|                           });
 | |
|                         },
 | |
|                         controlAffinity: ListTileControlAffinity.leading, //  <-- leading Checkbox
 | |
|                       )).expanded
 | |
|                 ],
 | |
|               ),
 | |
|               11.height,
 | |
|               LocaleKeys.userSearch.tr().toText16(),
 | |
|               11.height,
 | |
|               Row(
 | |
|                 children: [
 | |
|                   radioOption(widget.fromChat ? LocaleKeys.userId.tr() : LocaleKeys.name.tr(), 0, _selectedSearchIndex),
 | |
|                   radioOption(LocaleKeys.userName.tr(), 1, _selectedSearchIndex),
 | |
|                   radioOption(LocaleKeys.email.tr(), 2, _selectedSearchIndex),
 | |
|                 ],
 | |
|               ),
 | |
|               14.height,
 | |
|               Row(
 | |
|                 children: [
 | |
|                   DynamicTextFieldWidget(
 | |
|                     LocaleKeys.search.tr(),
 | |
|                     LocaleKeys.searchByUserName.tr(),
 | |
|                     inputAction: TextInputAction.done,
 | |
|                     suffixIconData: Icons.search,
 | |
|                     onChange: (String text) {
 | |
|                       searchText = text;
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ).expanded,
 | |
|                   IconButton(
 | |
|                     constraints: const BoxConstraints(),
 | |
|                     onPressed: () async {
 | |
|                       provider.chatUsersList!.clear();
 | |
|                       provider.pageNo = 1;
 | |
|                       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) ...[
 | |
|                             LocaleKeys.favorite.tr().toText16(),
 | |
|                             12.height,
 | |
|                             ListView.separated(
 | |
|                                 physics: const NeverScrollableScrollPhysics(),
 | |
|                                 shrinkWrap: true,
 | |
|                                 itemBuilder: (BuildContext cxt, int index) => employeeItemView(favouriteUserList![index]),
 | |
|                                 separatorBuilder: (BuildContext cxt, int 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: (BuildContext cxt, int index) => employeeItemView(nonFavouriteUserList![index]),
 | |
|                                 separatorBuilder: (BuildContext cxt, int index) => Container(
 | |
|                                       height: 1,
 | |
|                                       color: MyColors.borderE3Color,
 | |
|                                     ),
 | |
|                                 itemCount: nonFavouriteUserList?.length ?? 0),
 | |
|                           ],
 | |
|                         ],
 | |
|                       ).expanded,
 | |
|               selectedUsers!.isNotEmpty
 | |
|                   ? SizedBox(
 | |
|                       height: 95,
 | |
|                       child: ListView.builder(
 | |
|                           physics: const ClampingScrollPhysics(),
 | |
|                           scrollDirection: Axis.horizontal,
 | |
|                           itemCount: selectedUsers!.length,
 | |
|                           itemBuilder: (BuildContext context, int index2) {
 | |
|                             return Stack(children: [
 | |
|                               Column(
 | |
|                                 children: [
 | |
|                                   12.height,
 | |
|                                   Stack(
 | |
|                                     children: [
 | |
|                                       Container(
 | |
|                                           padding: const EdgeInsets.all(5),
 | |
|                                           child: SvgPicture.asset(
 | |
|                                             "assets/images/user.svg",
 | |
|                                             height: 48,
 | |
|                                             width: 48,
 | |
|                                           )),
 | |
|                                       Positioned(
 | |
|                                           right: 0,
 | |
|                                           top: 0,
 | |
|                                           child: InkWell(
 | |
|                                             child: SvgPicture.asset('assets/icons/close.svg', height: 15, width: 15),
 | |
|                                             onTap: () {
 | |
|                                               setState(() {
 | |
|                                                 // provider.chatUsersList![index]
 | |
|                                                 //     .isChecked = false;
 | |
| 
 | |
|                                                 List<ChatUser> user = provider.chatUsersList!.where((ChatUser value) => value.userName == selectedUsers[index2].userName).toList();
 | |
|                                                 if (user.isNotEmpty) {
 | |
|                                                   user.first.isChecked = false;
 | |
|                                                 }
 | |
|                                                 selectedUsers.remove(selectedUsers[index2]);
 | |
|                                               });
 | |
|                                             },
 | |
|                                           ))
 | |
|                                     ],
 | |
|                                   ),
 | |
|                                   (selectedUsers![index2].userName!.replaceFirst(".", " ").capitalizeFirstofEach ?? "").toText12(color: MyColors.darkTextColor).paddingOnly(left: 5, top: 5),
 | |
|                                   selectedUsers![index2].isTyping!
 | |
|                                       ? 'Typing...'
 | |
|                                           .toText10(
 | |
|                                             color: MyColors.textMixColor,
 | |
|                                           )
 | |
|                                           .paddingOnly(left: 5.0)
 | |
|                                       : const SizedBox()
 | |
|                                 ],
 | |
|                               ),
 | |
| 
 | |
|                               // IconButton(onPressed: (){}, icon: const Icon(Icons.close_outlined, color: Colors.red, size: 20)),
 | |
|                             ]);
 | |
|                           }))
 | |
|                   : 0.height,
 | |
| 
 | |
|               if (widget.fromChat)
 | |
|                 if (provider.chatUsersList != null && widget.fromChat)
 | |
|                   provider.chatUsersList!.isEmpty
 | |
|                       ? Column(
 | |
|                           children: [
 | |
|                             20.height,
 | |
|                             Utils.getNoDataWidget(context),
 | |
|                           ],
 | |
|                         )
 | |
|                       : ListView.separated(
 | |
|                           itemCount: provider.chatUsersList!.length,
 | |
|                           shrinkWrap: true,
 | |
|                           physics: const ClampingScrollPhysics(),
 | |
|                           controller: sc,
 | |
|                           padding: const EdgeInsets.only(bottom: 80.0, top: 20),
 | |
|                           itemBuilder: (BuildContext context, int index) {
 | |
|                             return SizedBox(
 | |
|                               height: 55,
 | |
|                               child: Row(
 | |
|                                 children: [
 | |
|                                   Stack(
 | |
|                                     children: <Widget>[
 | |
|                                       SvgPicture.asset(
 | |
|                                         "assets/images/user.svg",
 | |
|                                         height: 48,
 | |
|                                         width: 48,
 | |
|                                       ),
 | |
|                                       Positioned(
 | |
|                                         right: 5,
 | |
|                                         bottom: 1,
 | |
|                                         child: Container(
 | |
|                                           width: 10,
 | |
|                                           height: 10,
 | |
|                                           decoration: BoxDecoration(
 | |
|                                             color: provider.chatUsersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red,
 | |
|                                           ),
 | |
|                                         ).circle(10),
 | |
|                                       )
 | |
|                                     ],
 | |
|                                   ),
 | |
|                                   Column(
 | |
|                                     mainAxisAlignment: MainAxisAlignment.start,
 | |
|                                     crossAxisAlignment: CrossAxisAlignment.start,
 | |
|                                     children: [
 | |
|                                       (provider.chatUsersList![index].userName!.replaceFirst(".", " ").capitalizeFirstofEach ?? "").toText14(color: MyColors.darkTextColor).paddingOnly(left: 11, top: 13),
 | |
|                                       provider.chatUsersList![index].isTyping!
 | |
|                                           ? 'Typing...'
 | |
|                                               .toText10(
 | |
|                                                 color: MyColors.textMixColor,
 | |
|                                               )
 | |
|                                               .paddingOnly(left: 11.0)
 | |
|                                           : const SizedBox()
 | |
|                                     ],
 | |
|                                   ).expanded,
 | |
|                                   SizedBox(
 | |
|                                     width: 60,
 | |
|                                     child: Row(
 | |
|                                       crossAxisAlignment: CrossAxisAlignment.center,
 | |
|                                       mainAxisAlignment: MainAxisAlignment.end,
 | |
|                                       mainAxisSize: MainAxisSize.max,
 | |
|                                       children: <Widget>[
 | |
|                                         if (provider.chatUsersList![index].unreadMessageCount! > 0)
 | |
|                                           Container(
 | |
|                                             alignment: Alignment.center,
 | |
|                                             width: 18,
 | |
|                                             height: 18,
 | |
|                                             decoration: const BoxDecoration(
 | |
|                                               color: MyColors.redColor,
 | |
|                                               borderRadius: BorderRadius.all(
 | |
|                                                 Radius.circular(20),
 | |
|                                               ),
 | |
|                                             ),
 | |
|                                             child: (provider.chatUsersList![index].unreadMessageCount!.toString())
 | |
|                                                 .toText10(
 | |
|                                                   color: MyColors.white,
 | |
|                                                 )
 | |
|                                                 .center,
 | |
|                                           ).paddingOnly(right: 10).center,
 | |
|                                         Checkbox(
 | |
|                                           value: provider.chatUsersList![index].isChecked,
 | |
|                                           shape: CircleBorder(),
 | |
|                                           onChanged: (bool? value) {
 | |
|                                             setState(() {
 | |
|                                               provider.chatUsersList![index].isChecked = value;
 | |
|                                               if (provider.chatUsersList![index].isChecked == true) {
 | |
|                                                 selectedUsers.add(provider.chatUsersList![index]);
 | |
|                                               } else {
 | |
|                                                 selectedUsers.remove(provider.chatUsersList![index]);
 | |
|                                               }
 | |
|                                             });
 | |
|                                           },
 | |
|                                         )
 | |
|                                       ],
 | |
|                                     ),
 | |
|                                   ),
 | |
|                                 ],
 | |
|                               ),
 | |
|                             );
 | |
|                           },
 | |
|                           separatorBuilder: (BuildContext context, int index) => const Divider(color: MyColors.lightGreyE5Color).paddingOnly(left: 59),
 | |
|                         ).expanded,
 | |
|             ],
 | |
|           ).paddingOnly(left: 21, right: 21, bottom: 0, top: 21).expanded,
 | |
|           Row(
 | |
|             mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|             children: [
 | |
|               DefaultButton(
 | |
|                 LocaleKeys.cancel.tr(),
 | |
|                 () {
 | |
|                   Navigator.pop(context);
 | |
|                   provider.chatUsersList = [];
 | |
|                   provider.pageNo = 1;
 | |
|                 },
 | |
|                 textColor: MyColors.grey3AColor,
 | |
|                 colors: const [
 | |
|                   Color(0xffE6E6E6),
 | |
|                   Color(0xffE6E6E6),
 | |
|                 ],
 | |
|               ).paddingOnly(left: 14, right: 14, bottom: 15, top: 10).expanded,
 | |
|               DefaultButton(
 | |
|                 LocaleKeys.submit.tr(),
 | |
|                 () {
 | |
|                   // Navigator.pop(context);
 | |
|                   // provider.chatUsersList = [];
 | |
|                   // provider.pageNo = 1;
 | |
|                   createGroup();
 | |
|                 },
 | |
|                 textColor: MyColors.whiteColor,
 | |
|                 colors: const [
 | |
|                   Color(0xff32D892),
 | |
|                   Color(0xff1AB170),
 | |
|                 ],
 | |
|               ).paddingOnly(left: 15, right: 15, bottom: 15, top: 10).expanded,
 | |
|             ],
 | |
|           )
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   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),
 | |
|           ],
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   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),
 | |
|             ),
 | |
|           ),
 | |
|           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;
 | |
|   }
 | |
| 
 | |
|   void createGroup() async {
 | |
|     RegExp validCharacters = RegExp(r'^[a-zA-Z0-9_\-=@,\.;]+$');
 | |
|     if (!validCharacters.hasMatch(groupName)) {
 | |
|       // Utils.showToast(LocaleKeys.enterGroupName.tr());
 | |
|       Utils.showToast(LocaleKeys.enterGroupName.tr());
 | |
|     } else if (groupName.length < 10) {
 | |
|       Utils.showToast(LocaleKeys.groupNameshouldbe.tr());
 | |
|     } else {
 | |
|       List<ChatUser>? mainUsers = [];
 | |
|       ChatUser admin = ChatUser.fromJson(AppState().chatDetails!.response!.toJson());
 | |
|       admin.isAdmin = true;
 | |
|       admin.userStatus = 2;
 | |
|       admin.unreadMessageCount = 0;
 | |
|       admin.totalCount = 0;
 | |
|       mainUsers.add(admin);
 | |
|       CreateGroupRequest request = CreateGroupRequest(
 | |
|           groupUserList: [...selectedUsers, ...mainUsers].toList(),
 | |
|           canArchive: false,
 | |
|           isMeeting: false,
 | |
|           canShareS: isShareScreen,
 | |
|           canAudioC: isAudioCall,
 | |
|           canAttach: isAttachments,
 | |
|           canVideoC: isVideoCall,
 | |
|           groupName: groupName,
 | |
|           adminUserId: AppState().chatDetails!.response!.id);
 | |
| 
 | |
|       if (widget.groupDetails!.groupId != null) {
 | |
|         request.groupId = widget.groupDetails!.groupId;
 | |
|         await provider.updateGroupAndUsers(request);
 | |
|       } else {
 | |
|         await provider.addGroupAndUsers(request);
 | |
|       }
 | |
|       Navigator.pop(context);
 | |
|     }
 | |
|   }
 | |
| }
 |