|  |  |  | @ -1,18 +1,16 @@ | 
		
	
		
			
				|  |  |  |  | import 'dart:async'; | 
		
	
		
			
				|  |  |  |  | import 'dart:convert'; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | import 'package:easy_localization/easy_localization.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:flutter/material.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:flutter_svg/flutter_svg.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/app_state/app_state.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/classes/colors.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/call.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/ui/chat/call/chat_outgoing_call_screen.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/ui/chat/chat_bubble.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart'; | 
		
	
	
		
			
				
					|  |  |  | @ -49,9 +47,7 @@ class _ChatDetailScreenState extends State<ChatDetailScreen> { | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     await Future.delayed( | 
		
	
		
			
				|  |  |  |  |       const Duration( | 
		
	
		
			
				|  |  |  |  |         milliseconds: 1000, | 
		
	
		
			
				|  |  |  |  |       ), | 
		
	
		
			
				|  |  |  |  |       const Duration(milliseconds: 1000), | 
		
	
		
			
				|  |  |  |  |     ); | 
		
	
		
			
				|  |  |  |  |     _rc.loadComplete(); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
	
		
			
				
					|  |  |  | @ -71,283 +67,172 @@ class _ChatDetailScreenState extends State<ChatDetailScreen> { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     return Scaffold( | 
		
	
		
			
				|  |  |  |  |       backgroundColor: MyColors.backgroundColor, | 
		
	
		
			
				|  |  |  |  |       appBar: AppBarWidget(context, | 
		
	
		
			
				|  |  |  |  |           title: userDetails["targetUser"].userName.toString().replaceAll(".", " ").capitalizeFirstofEach, | 
		
	
		
			
				|  |  |  |  |           showHomeButton: false, | 
		
	
		
			
				|  |  |  |  |           image: userDetails["targetUser"].image, | 
		
	
		
			
				|  |  |  |  |           actions: [ | 
		
	
		
			
				|  |  |  |  |             IconButton( | 
		
	
		
			
				|  |  |  |  |               onPressed: () { | 
		
	
		
			
				|  |  |  |  |                 makeCall( | 
		
	
		
			
				|  |  |  |  |                   callType: "AUDIO", | 
		
	
		
			
				|  |  |  |  |                   con: hubConnection, | 
		
	
		
			
				|  |  |  |  |                 ); | 
		
	
		
			
				|  |  |  |  |               }, | 
		
	
		
			
				|  |  |  |  |               icon: SvgPicture.asset( | 
		
	
		
			
				|  |  |  |  |                 "assets/icons/chat/call.svg", | 
		
	
		
			
				|  |  |  |  |                 width: 22, | 
		
	
		
			
				|  |  |  |  |                 height: 22, | 
		
	
		
			
				|  |  |  |  |               ), | 
		
	
		
			
				|  |  |  |  |             ), | 
		
	
		
			
				|  |  |  |  |             IconButton( | 
		
	
		
			
				|  |  |  |  |               onPressed: () { | 
		
	
		
			
				|  |  |  |  |                 makeCall( | 
		
	
		
			
				|  |  |  |  |                   callType: "VIDEO", | 
		
	
		
			
				|  |  |  |  |                   con: hubConnection, | 
		
	
		
			
				|  |  |  |  |                 ); | 
		
	
		
			
				|  |  |  |  |               }, | 
		
	
		
			
				|  |  |  |  |               icon: SvgPicture.asset( | 
		
	
		
			
				|  |  |  |  |                 "assets/icons/chat/video_call.svg", | 
		
	
		
			
				|  |  |  |  |                 width: 20, | 
		
	
		
			
				|  |  |  |  |                 height: 20, | 
		
	
		
			
				|  |  |  |  |               ), | 
		
	
		
			
				|  |  |  |  |             ), | 
		
	
		
			
				|  |  |  |  |             10.width, | 
		
	
		
			
				|  |  |  |  |           ]), | 
		
	
		
			
				|  |  |  |  |       appBar: AppBarWidget( | 
		
	
		
			
				|  |  |  |  |         context, | 
		
	
		
			
				|  |  |  |  |         title: userDetails["targetUser"].userName.toString().replaceAll(".", " ").capitalizeFirstofEach, | 
		
	
		
			
				|  |  |  |  |         showHomeButton: false, | 
		
	
		
			
				|  |  |  |  |         image: userDetails["targetUser"].image, | 
		
	
		
			
				|  |  |  |  |         actions: [ | 
		
	
		
			
				|  |  |  |  |           IconButton( | 
		
	
		
			
				|  |  |  |  |             onPressed: () { | 
		
	
		
			
				|  |  |  |  |               makeCall(callType: "AUDIO", con: hubConnection); | 
		
	
		
			
				|  |  |  |  |             }, | 
		
	
		
			
				|  |  |  |  |             icon: SvgPicture.asset("assets/icons/chat/call.svg", width: 22, height: 22), | 
		
	
		
			
				|  |  |  |  |           ), | 
		
	
		
			
				|  |  |  |  |           IconButton( | 
		
	
		
			
				|  |  |  |  |             onPressed: () { | 
		
	
		
			
				|  |  |  |  |               makeCall(callType: "VIDEO", con: hubConnection); | 
		
	
		
			
				|  |  |  |  |             }, | 
		
	
		
			
				|  |  |  |  |             icon: SvgPicture.asset("assets/icons/chat/video_call.svg", width: 20, height: 20), | 
		
	
		
			
				|  |  |  |  |           ), | 
		
	
		
			
				|  |  |  |  |           10.width, | 
		
	
		
			
				|  |  |  |  |         ], | 
		
	
		
			
				|  |  |  |  |       ), | 
		
	
		
			
				|  |  |  |  |       body: Consumer<ChatProviderModel>( | 
		
	
		
			
				|  |  |  |  |         builder: (BuildContext context, ChatProviderModel m, Widget? child) { | 
		
	
		
			
				|  |  |  |  |           return (m.isLoading | 
		
	
		
			
				|  |  |  |  |               ? ChatHomeShimmer() | 
		
	
		
			
				|  |  |  |  |               : Column( | 
		
	
		
			
				|  |  |  |  |                   children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                     Expanded( | 
		
	
		
			
				|  |  |  |  |                       flex: 2, | 
		
	
		
			
				|  |  |  |  |                       child: SmartRefresher( | 
		
	
		
			
				|  |  |  |  |                         enablePullDown: false, | 
		
	
		
			
				|  |  |  |  |                         enablePullUp: true, | 
		
	
		
			
				|  |  |  |  |                         onLoading: () { | 
		
	
		
			
				|  |  |  |  |                           getMoreChat(); | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         header: const MaterialClassicHeader( | 
		
	
		
			
				|  |  |  |  |                           color: MyColors.gradiantEndColor, | 
		
	
		
			
				|  |  |  |  |                         ), | 
		
	
		
			
				|  |  |  |  |                         controller: _rc, | 
		
	
		
			
				|  |  |  |  |                     SmartRefresher( | 
		
	
		
			
				|  |  |  |  |                       enablePullDown: false, | 
		
	
		
			
				|  |  |  |  |                       enablePullUp: true, | 
		
	
		
			
				|  |  |  |  |                       onLoading: () { | 
		
	
		
			
				|  |  |  |  |                         getMoreChat(); | 
		
	
		
			
				|  |  |  |  |                       }, | 
		
	
		
			
				|  |  |  |  |                       header: const MaterialClassicHeader( | 
		
	
		
			
				|  |  |  |  |                         color: MyColors.gradiantEndColor, | 
		
	
		
			
				|  |  |  |  |                       ), | 
		
	
		
			
				|  |  |  |  |                       controller: _rc, | 
		
	
		
			
				|  |  |  |  |                       reverse: true, | 
		
	
		
			
				|  |  |  |  |                       child: ListView.separated( | 
		
	
		
			
				|  |  |  |  |                         controller: m.scrollController, | 
		
	
		
			
				|  |  |  |  |                         shrinkWrap: true, | 
		
	
		
			
				|  |  |  |  |                         physics: const BouncingScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                         reverse: true, | 
		
	
		
			
				|  |  |  |  |                         child: ListView.builder( | 
		
	
		
			
				|  |  |  |  |                           controller: m.scrollController, | 
		
	
		
			
				|  |  |  |  |                           shrinkWrap: true, | 
		
	
		
			
				|  |  |  |  |                           physics: const BouncingScrollPhysics(), | 
		
	
		
			
				|  |  |  |  |                           reverse: true, | 
		
	
		
			
				|  |  |  |  |                           itemCount: m.userChatHistory.length, | 
		
	
		
			
				|  |  |  |  |                           padding: const EdgeInsets.only(top: 20), | 
		
	
		
			
				|  |  |  |  |                           itemBuilder: (BuildContext context, int i) { | 
		
	
		
			
				|  |  |  |  |                             return SwipeTo( | 
		
	
		
			
				|  |  |  |  |                               iconColor: MyColors.lightGreenColor, | 
		
	
		
			
				|  |  |  |  |                               child: ChatBubble( | 
		
	
		
			
				|  |  |  |  |                                 text: m.userChatHistory[i].contant.toString(), | 
		
	
		
			
				|  |  |  |  |                                 replyText: m.userChatHistory[i].userChatReplyResponse != null ? m.userChatHistory[i].userChatReplyResponse!.contant.toString() : "", | 
		
	
		
			
				|  |  |  |  |                                 isSeen: m.userChatHistory[i].isSeen == true ? true : false, | 
		
	
		
			
				|  |  |  |  |                                 isCurrentUser: m.userChatHistory[i].currentUserId == AppState().chatDetails!.response!.id ? true : false, | 
		
	
		
			
				|  |  |  |  |                                 isDelivered: m.userChatHistory[i].currentUserId == AppState().chatDetails!.response!.id && m.userChatHistory[i].isDelivered == true ? true : false, | 
		
	
		
			
				|  |  |  |  |                                 dateTime: m.dateFormte(m.userChatHistory[i].createdDate!), | 
		
	
		
			
				|  |  |  |  |                                 isReplied: m.userChatHistory[i].userChatReplyResponse != null ? true : false, | 
		
	
		
			
				|  |  |  |  |                                 userName: AppState().chatDetails!.response!.userName == m.userChatHistory[i].currentUserName.toString() ? "You" : m.userChatHistory[i].currentUserName.toString(), | 
		
	
		
			
				|  |  |  |  |                               ), | 
		
	
		
			
				|  |  |  |  |                               onRightSwipe: () { | 
		
	
		
			
				|  |  |  |  |                                 m.chatReply( | 
		
	
		
			
				|  |  |  |  |                                   m.userChatHistory[i], | 
		
	
		
			
				|  |  |  |  |                                 ); | 
		
	
		
			
				|  |  |  |  |                               }, | 
		
	
		
			
				|  |  |  |  |                             ); | 
		
	
		
			
				|  |  |  |  |                           }, | 
		
	
		
			
				|  |  |  |  |                         ), | 
		
	
		
			
				|  |  |  |  |                         itemCount: m.userChatHistory.length, | 
		
	
		
			
				|  |  |  |  |                         padding: const EdgeInsets.all(21), | 
		
	
		
			
				|  |  |  |  |                         separatorBuilder: (cxt, index) => 8.height, | 
		
	
		
			
				|  |  |  |  |                         itemBuilder: (BuildContext context, int i) { | 
		
	
		
			
				|  |  |  |  |                           return SwipeTo( | 
		
	
		
			
				|  |  |  |  |                             iconColor: MyColors.lightGreenColor, | 
		
	
		
			
				|  |  |  |  |                             child: ChatBubble( | 
		
	
		
			
				|  |  |  |  |                               text: m.userChatHistory[i].contant.toString(), | 
		
	
		
			
				|  |  |  |  |                               replyText: m.userChatHistory[i].userChatReplyResponse != null ? m.userChatHistory[i].userChatReplyResponse!.contant.toString() : "", | 
		
	
		
			
				|  |  |  |  |                               isSeen: m.userChatHistory[i].isSeen == true ? true : false, | 
		
	
		
			
				|  |  |  |  |                               isCurrentUser: m.userChatHistory[i].currentUserId == AppState().chatDetails!.response!.id ? true : false, | 
		
	
		
			
				|  |  |  |  |                               isDelivered: m.userChatHistory[i].currentUserId == AppState().chatDetails!.response!.id && m.userChatHistory[i].isDelivered == true ? true : false, | 
		
	
		
			
				|  |  |  |  |                               dateTime: m.dateFormte(m.userChatHistory[i].createdDate!), | 
		
	
		
			
				|  |  |  |  |                               isReplied: m.userChatHistory[i].userChatReplyResponse != null ? true : false, | 
		
	
		
			
				|  |  |  |  |                               userName: AppState().chatDetails!.response!.userName == m.userChatHistory[i].currentUserName.toString() ? "You" : m.userChatHistory[i].currentUserName.toString(), | 
		
	
		
			
				|  |  |  |  |                             ), | 
		
	
		
			
				|  |  |  |  |                             onRightSwipe: () { | 
		
	
		
			
				|  |  |  |  |                               m.chatReply( | 
		
	
		
			
				|  |  |  |  |                                 m.userChatHistory[i], | 
		
	
		
			
				|  |  |  |  |                               ); | 
		
	
		
			
				|  |  |  |  |                             }, | 
		
	
		
			
				|  |  |  |  |                           ); | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                       ), | 
		
	
		
			
				|  |  |  |  |                     ), | 
		
	
		
			
				|  |  |  |  |                     ).expanded, | 
		
	
		
			
				|  |  |  |  |                     if (m.isMsgReply) | 
		
	
		
			
				|  |  |  |  |                       Row( | 
		
	
		
			
				|  |  |  |  |                         children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                           Container( | 
		
	
		
			
				|  |  |  |  |                             height: 80, | 
		
	
		
			
				|  |  |  |  |                             color: MyColors.textMixColor, | 
		
	
		
			
				|  |  |  |  |                             width: 6, | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                           Expanded( | 
		
	
		
			
				|  |  |  |  |                             child: Container( | 
		
	
		
			
				|  |  |  |  |                               height: 80, | 
		
	
		
			
				|  |  |  |  |                               color: MyColors.black.withOpacity(0.10), | 
		
	
		
			
				|  |  |  |  |                               child: ListTile( | 
		
	
		
			
				|  |  |  |  |                                 title: (AppState().chatDetails!.response!.userName == m.repliedMsg.first.currentUserName.toString() | 
		
	
		
			
				|  |  |  |  |                                         ? "You" | 
		
	
		
			
				|  |  |  |  |                                         : m.repliedMsg.first.currentUserName.toString().replaceAll(".", " ")) | 
		
	
		
			
				|  |  |  |  |                                     .toText14(color: MyColors.lightGreenColor), | 
		
	
		
			
				|  |  |  |  |                                 subtitle: (m.repliedMsg.isNotEmpty ? m.repliedMsg.first.contant! : "").toText12( | 
		
	
		
			
				|  |  |  |  |                                   color: MyColors.white, | 
		
	
		
			
				|  |  |  |  |                                   maxLine: 2, | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                                 trailing: GestureDetector( | 
		
	
		
			
				|  |  |  |  |                                   onTap: m.closeMe, | 
		
	
		
			
				|  |  |  |  |                                   child: Container( | 
		
	
		
			
				|  |  |  |  |                                     decoration: BoxDecoration( | 
		
	
		
			
				|  |  |  |  |                                       color: MyColors.white.withOpacity(0.5), | 
		
	
		
			
				|  |  |  |  |                                       borderRadius: const BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |                                         Radius.circular(20), | 
		
	
		
			
				|  |  |  |  |                                       ), | 
		
	
		
			
				|  |  |  |  |                                     ), | 
		
	
		
			
				|  |  |  |  |                                     child: const Icon( | 
		
	
		
			
				|  |  |  |  |                                       Icons.close, | 
		
	
		
			
				|  |  |  |  |                                       size: 23, | 
		
	
		
			
				|  |  |  |  |                                       color: MyColors.white, | 
		
	
		
			
				|  |  |  |  |                                     ), | 
		
	
		
			
				|  |  |  |  |                                   ), | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                       SizedBox( | 
		
	
		
			
				|  |  |  |  |                         height: 82, | 
		
	
		
			
				|  |  |  |  |                         child: Row( | 
		
	
		
			
				|  |  |  |  |                           children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                             Container(height: 82, color: MyColors.textMixColor, width: 6), | 
		
	
		
			
				|  |  |  |  |                             Container( | 
		
	
		
			
				|  |  |  |  |                               color: MyColors.darkTextColor.withOpacity(0.10), | 
		
	
		
			
				|  |  |  |  |                               padding: const EdgeInsets.only(top: 11, left: 14, bottom: 14, right: 21), | 
		
	
		
			
				|  |  |  |  |                               child: Row( | 
		
	
		
			
				|  |  |  |  |                                 children: [ | 
		
	
		
			
				|  |  |  |  |                                   Column( | 
		
	
		
			
				|  |  |  |  |                                     crossAxisAlignment: CrossAxisAlignment.start, | 
		
	
		
			
				|  |  |  |  |                                     children: [ | 
		
	
		
			
				|  |  |  |  |                                       (AppState().chatDetails!.response!.userName == m.repliedMsg.first.currentUserName.toString() | 
		
	
		
			
				|  |  |  |  |                                               ? "You" | 
		
	
		
			
				|  |  |  |  |                                               : m.repliedMsg.first.currentUserName.toString().replaceAll(".", " ")) | 
		
	
		
			
				|  |  |  |  |                                           .toText14(color: MyColors.lightGreenColor), | 
		
	
		
			
				|  |  |  |  |                                       (m.repliedMsg.isNotEmpty ? m.repliedMsg.first.contant! : "").toText12(color: MyColors.grey71Color, maxLine: 2) | 
		
	
		
			
				|  |  |  |  |                                     ], | 
		
	
		
			
				|  |  |  |  |                                   ).expanded, | 
		
	
		
			
				|  |  |  |  |                                   12.width, | 
		
	
		
			
				|  |  |  |  |                                   const Icon(Icons.cancel, size: 23, color: MyColors.grey7BColor).onPress(m.closeMe), | 
		
	
		
			
				|  |  |  |  |                                 ], | 
		
	
		
			
				|  |  |  |  |                               ), | 
		
	
		
			
				|  |  |  |  |                             ), | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                         ], | 
		
	
		
			
				|  |  |  |  |                             ).expanded, | 
		
	
		
			
				|  |  |  |  |                           ], | 
		
	
		
			
				|  |  |  |  |                         ), | 
		
	
		
			
				|  |  |  |  |                       ), | 
		
	
		
			
				|  |  |  |  |                     if (m.isFileSelected && m.sFileType == ".png" || m.sFileType == ".jpeg" || m.sFileType == ".jpg") | 
		
	
		
			
				|  |  |  |  |                       Card( | 
		
	
		
			
				|  |  |  |  |                         margin: EdgeInsets.zero, | 
		
	
		
			
				|  |  |  |  |                         elevation: 0, | 
		
	
		
			
				|  |  |  |  |                         child: Padding( | 
		
	
		
			
				|  |  |  |  |                           padding: const EdgeInsets.only( | 
		
	
		
			
				|  |  |  |  |                             left: 20, | 
		
	
		
			
				|  |  |  |  |                             right: 20, | 
		
	
		
			
				|  |  |  |  |                             top: 20, | 
		
	
		
			
				|  |  |  |  |                             bottom: 0, | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                           child: Card( | 
		
	
		
			
				|  |  |  |  |                             margin: EdgeInsets.zero, | 
		
	
		
			
				|  |  |  |  |                             shape: RoundedRectangleBorder( | 
		
	
		
			
				|  |  |  |  |                               borderRadius: BorderRadius.circular(0), | 
		
	
		
			
				|  |  |  |  |                             ), | 
		
	
		
			
				|  |  |  |  |                             elevation: 0, | 
		
	
		
			
				|  |  |  |  |                             child: Container( | 
		
	
		
			
				|  |  |  |  |                               height: 200, | 
		
	
		
			
				|  |  |  |  |                               decoration: BoxDecoration( | 
		
	
		
			
				|  |  |  |  |                                 image: DecorationImage( | 
		
	
		
			
				|  |  |  |  |                                   image: FileImage( | 
		
	
		
			
				|  |  |  |  |                                     m.selectedFile, | 
		
	
		
			
				|  |  |  |  |                       SizedBox(height: 200, width: double.infinity, child: Image.file(m.selectedFile, fit: BoxFit.cover)).paddingOnly(left: 21, right: 21, top: 21), | 
		
	
		
			
				|  |  |  |  |                     TextField( | 
		
	
		
			
				|  |  |  |  |                       controller: m.message, | 
		
	
		
			
				|  |  |  |  |                       decoration: InputDecoration( | 
		
	
		
			
				|  |  |  |  |                         hintText: m.isFileSelected ? m.selectedFile.path.split("/").last : LocaleKeys.typeheretoreply.tr(), | 
		
	
		
			
				|  |  |  |  |                         hintStyle: TextStyle(color: m.isFileSelected ? MyColors.darkTextColor : MyColors.grey98Color, fontSize: 14), | 
		
	
		
			
				|  |  |  |  |                         border: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                         focusedBorder: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                         enabledBorder: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                         errorBorder: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                         disabledBorder: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                         contentPadding: EdgeInsets.only(left: m.sFileType.isNotEmpty ? 10 : 20, right: m.sFileType.isNotEmpty ? 0 : 5, top: 20, bottom: 20), | 
		
	
		
			
				|  |  |  |  |                         prefixIconConstraints: BoxConstraints(), | 
		
	
		
			
				|  |  |  |  |                         prefixIcon: m.sFileType.isNotEmpty ? SvgPicture.asset(m.getType(m.sFileType), height: 30, width: 22, alignment: Alignment.center, fit: BoxFit.cover) : null, | 
		
	
		
			
				|  |  |  |  |                         suffixIcon: SizedBox( | 
		
	
		
			
				|  |  |  |  |                           width: 96, | 
		
	
		
			
				|  |  |  |  |                           child: Row( | 
		
	
		
			
				|  |  |  |  |                             mainAxisAlignment: MainAxisAlignment.end, | 
		
	
		
			
				|  |  |  |  |                             crossAxisAlignment: CrossAxisAlignment.center, // added line | 
		
	
		
			
				|  |  |  |  |                             children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                               if (m.sFileType.isNotEmpty) | 
		
	
		
			
				|  |  |  |  |                                 IconButton( | 
		
	
		
			
				|  |  |  |  |                                   padding: EdgeInsets.zero, | 
		
	
		
			
				|  |  |  |  |                                   alignment: Alignment.centerRight, | 
		
	
		
			
				|  |  |  |  |                                   icon: Row( | 
		
	
		
			
				|  |  |  |  |                                     crossAxisAlignment: CrossAxisAlignment.start, | 
		
	
		
			
				|  |  |  |  |                                     mainAxisAlignment: MainAxisAlignment.end, | 
		
	
		
			
				|  |  |  |  |                                     mainAxisSize: MainAxisSize.max, | 
		
	
		
			
				|  |  |  |  |                                     children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                                       Container( | 
		
	
		
			
				|  |  |  |  |                                         decoration: const BoxDecoration( | 
		
	
		
			
				|  |  |  |  |                                           color: MyColors.redA3Color, | 
		
	
		
			
				|  |  |  |  |                                           borderRadius: BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |                                             Radius.circular(20), | 
		
	
		
			
				|  |  |  |  |                                           ), | 
		
	
		
			
				|  |  |  |  |                                         ), | 
		
	
		
			
				|  |  |  |  |                                         child: const Icon(Icons.close, size: 15, color: MyColors.white), | 
		
	
		
			
				|  |  |  |  |                                       ), | 
		
	
		
			
				|  |  |  |  |                                       ("Clear").toText11(color: MyColors.redA3Color).paddingOnly(left: 4), | 
		
	
		
			
				|  |  |  |  |                                     ], | 
		
	
		
			
				|  |  |  |  |                                   ), | 
		
	
		
			
				|  |  |  |  |                                   fit: BoxFit.cover, | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                                 borderRadius: const BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |                                   Radius.circular(0), | 
		
	
		
			
				|  |  |  |  |                                   onPressed: () async { | 
		
	
		
			
				|  |  |  |  |                                     m.removeAttachment(); | 
		
	
		
			
				|  |  |  |  |                                   }, | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                               ), | 
		
	
		
			
				|  |  |  |  |                               child: const SizedBox( | 
		
	
		
			
				|  |  |  |  |                                 width: double.infinity, | 
		
	
		
			
				|  |  |  |  |                                 height: 200, | 
		
	
		
			
				|  |  |  |  |                               ), | 
		
	
		
			
				|  |  |  |  |                             ), | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                         ), | 
		
	
		
			
				|  |  |  |  |                       ), | 
		
	
		
			
				|  |  |  |  |                     Card( | 
		
	
		
			
				|  |  |  |  |                       margin: EdgeInsets.zero, | 
		
	
		
			
				|  |  |  |  |                       child: TextField( | 
		
	
		
			
				|  |  |  |  |                         controller: m.message, | 
		
	
		
			
				|  |  |  |  |                         decoration: InputDecoration( | 
		
	
		
			
				|  |  |  |  |                           hintText: m.isFileSelected ? m.selectedFile.path.split("/").last : LocaleKeys.typeheretoreply.tr(), | 
		
	
		
			
				|  |  |  |  |                           hintStyle: TextStyle( | 
		
	
		
			
				|  |  |  |  |                             color: m.isFileSelected ? MyColors.darkTextColor : MyColors.grey98Color, | 
		
	
		
			
				|  |  |  |  |                             fontSize: 14, | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                           border: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                           focusedBorder: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                           enabledBorder: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                           errorBorder: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                           disabledBorder: InputBorder.none, | 
		
	
		
			
				|  |  |  |  |                           contentPadding: EdgeInsets.only( | 
		
	
		
			
				|  |  |  |  |                             left: m.sFileType.isNotEmpty ? 10 : 20, | 
		
	
		
			
				|  |  |  |  |                             right: m.sFileType.isNotEmpty ? 0 : 5, | 
		
	
		
			
				|  |  |  |  |                             top: 20, | 
		
	
		
			
				|  |  |  |  |                             bottom: 20, | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                           prefixIcon: m.sFileType.isNotEmpty | 
		
	
		
			
				|  |  |  |  |                               ? Row( | 
		
	
		
			
				|  |  |  |  |                                   mainAxisSize: MainAxisSize.min, | 
		
	
		
			
				|  |  |  |  |                                   mainAxisAlignment: MainAxisAlignment.start, | 
		
	
		
			
				|  |  |  |  |                                   children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                                     SvgPicture.asset( | 
		
	
		
			
				|  |  |  |  |                                       m.getType(m.sFileType), | 
		
	
		
			
				|  |  |  |  |                                       height: 30, | 
		
	
		
			
				|  |  |  |  |                                       width: 25, | 
		
	
		
			
				|  |  |  |  |                                       alignment: Alignment.center, | 
		
	
		
			
				|  |  |  |  |                                       fit: BoxFit.cover, | 
		
	
		
			
				|  |  |  |  |                                     ).paddingOnly(left: 20), | 
		
	
		
			
				|  |  |  |  |                                   ], | 
		
	
		
			
				|  |  |  |  |                                 ) | 
		
	
		
			
				|  |  |  |  |                               : null, | 
		
	
		
			
				|  |  |  |  |                           suffixIcon: SizedBox( | 
		
	
		
			
				|  |  |  |  |                             width: 96, | 
		
	
		
			
				|  |  |  |  |                             child: Row( | 
		
	
		
			
				|  |  |  |  |                               mainAxisAlignment: MainAxisAlignment.end, | 
		
	
		
			
				|  |  |  |  |                               crossAxisAlignment: CrossAxisAlignment.center, // added line | 
		
	
		
			
				|  |  |  |  |                               children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                                 if (m.sFileType.isNotEmpty) | 
		
	
		
			
				|  |  |  |  |                                   IconButton( | 
		
	
		
			
				|  |  |  |  |                               if (m.sFileType.isEmpty) | 
		
	
		
			
				|  |  |  |  |                                 RotationTransition( | 
		
	
		
			
				|  |  |  |  |                                   turns: const AlwaysStoppedAnimation(45 / 360), | 
		
	
		
			
				|  |  |  |  |                                   child: IconButton( | 
		
	
		
			
				|  |  |  |  |                                     padding: EdgeInsets.zero, | 
		
	
		
			
				|  |  |  |  |                                     alignment: Alignment.centerRight, | 
		
	
		
			
				|  |  |  |  |                                     icon: Row( | 
		
	
		
			
				|  |  |  |  |                                       crossAxisAlignment: CrossAxisAlignment.start, | 
		
	
		
			
				|  |  |  |  |                                       mainAxisAlignment: MainAxisAlignment.end, | 
		
	
		
			
				|  |  |  |  |                                       mainAxisSize: MainAxisSize.max, | 
		
	
		
			
				|  |  |  |  |                                       children: <Widget>[ | 
		
	
		
			
				|  |  |  |  |                                         Container( | 
		
	
		
			
				|  |  |  |  |                                           decoration: const BoxDecoration( | 
		
	
		
			
				|  |  |  |  |                                             color: MyColors.redA3Color, | 
		
	
		
			
				|  |  |  |  |                                             borderRadius: BorderRadius.all( | 
		
	
		
			
				|  |  |  |  |                                               Radius.circular(20), | 
		
	
		
			
				|  |  |  |  |                                             ), | 
		
	
		
			
				|  |  |  |  |                                           ), | 
		
	
		
			
				|  |  |  |  |                                           child: const Icon( | 
		
	
		
			
				|  |  |  |  |                                             Icons.close, | 
		
	
		
			
				|  |  |  |  |                                             size: 15, | 
		
	
		
			
				|  |  |  |  |                                             color: MyColors.white, | 
		
	
		
			
				|  |  |  |  |                                           ), | 
		
	
		
			
				|  |  |  |  |                                         ), | 
		
	
		
			
				|  |  |  |  |                                         ("Clear") | 
		
	
		
			
				|  |  |  |  |                                             .toText11( | 
		
	
		
			
				|  |  |  |  |                                               color: MyColors.redA3Color, | 
		
	
		
			
				|  |  |  |  |                                             ) | 
		
	
		
			
				|  |  |  |  |                                             .paddingOnly( | 
		
	
		
			
				|  |  |  |  |                                               left: 4, | 
		
	
		
			
				|  |  |  |  |                                             ), | 
		
	
		
			
				|  |  |  |  |                                       ], | 
		
	
		
			
				|  |  |  |  |                                     ), | 
		
	
		
			
				|  |  |  |  |                                     alignment: Alignment.topRight, | 
		
	
		
			
				|  |  |  |  |                                     icon: const Icon(Icons.attach_file_rounded, size: 26, color: MyColors.grey3AColor), | 
		
	
		
			
				|  |  |  |  |                                     onPressed: () async { | 
		
	
		
			
				|  |  |  |  |                                       m.removeAttachment(); | 
		
	
		
			
				|  |  |  |  |                                       m.selectImageToUpload(context); | 
		
	
		
			
				|  |  |  |  |                                     }, | 
		
	
		
			
				|  |  |  |  |                                   ), | 
		
	
		
			
				|  |  |  |  |                                 if (m.sFileType.isEmpty) | 
		
	
		
			
				|  |  |  |  |                                   RotationTransition( | 
		
	
		
			
				|  |  |  |  |                                     turns: const AlwaysStoppedAnimation(45 / 360), | 
		
	
		
			
				|  |  |  |  |                                     child: IconButton( | 
		
	
		
			
				|  |  |  |  |                                       padding: EdgeInsets.zero, | 
		
	
		
			
				|  |  |  |  |                                       alignment: Alignment.topRight, | 
		
	
		
			
				|  |  |  |  |                                       icon: const Icon( | 
		
	
		
			
				|  |  |  |  |                                         Icons.attach_file_rounded, | 
		
	
		
			
				|  |  |  |  |                                         size: 26, | 
		
	
		
			
				|  |  |  |  |                                         color: MyColors.grey3AColor, | 
		
	
		
			
				|  |  |  |  |                                       ), | 
		
	
		
			
				|  |  |  |  |                                       onPressed: () async { | 
		
	
		
			
				|  |  |  |  |                                         m.selectImageToUpload(context); | 
		
	
		
			
				|  |  |  |  |                                       }, | 
		
	
		
			
				|  |  |  |  |                                     ), | 
		
	
		
			
				|  |  |  |  |                                   ), | 
		
	
		
			
				|  |  |  |  |                                 IconButton( | 
		
	
		
			
				|  |  |  |  |                                   alignment: Alignment.centerRight, | 
		
	
		
			
				|  |  |  |  |                                   padding: EdgeInsets.zero, | 
		
	
		
			
				|  |  |  |  |                                   icon: SvgPicture.asset( | 
		
	
		
			
				|  |  |  |  |                                     "assets/icons/chat/chat_send_icon.svg", | 
		
	
		
			
				|  |  |  |  |                                     height: 26, | 
		
	
		
			
				|  |  |  |  |                                     width: 26, | 
		
	
		
			
				|  |  |  |  |                                   ), | 
		
	
		
			
				|  |  |  |  |                                   onPressed: () { | 
		
	
		
			
				|  |  |  |  |                                     m.sendChatMessage( | 
		
	
		
			
				|  |  |  |  |                                       userDetails["targetUser"].id, | 
		
	
		
			
				|  |  |  |  |                                       userDetails["targetUser"].userName, | 
		
	
		
			
				|  |  |  |  |                                       context, | 
		
	
		
			
				|  |  |  |  |                                     ); | 
		
	
		
			
				|  |  |  |  |                                   }, | 
		
	
		
			
				|  |  |  |  |                                 ) | 
		
	
		
			
				|  |  |  |  |                               ], | 
		
	
		
			
				|  |  |  |  |                             ), | 
		
	
		
			
				|  |  |  |  |                           ).paddingOnly( | 
		
	
		
			
				|  |  |  |  |                             right: 20, | 
		
	
		
			
				|  |  |  |  |                                 ), | 
		
	
		
			
				|  |  |  |  |                               IconButton( | 
		
	
		
			
				|  |  |  |  |                                 alignment: Alignment.centerRight, | 
		
	
		
			
				|  |  |  |  |                                 padding: EdgeInsets.zero, | 
		
	
		
			
				|  |  |  |  |                                 icon: SvgPicture.asset("assets/icons/chat/chat_send_icon.svg", height: 26, width: 26), | 
		
	
		
			
				|  |  |  |  |                                 onPressed: () { | 
		
	
		
			
				|  |  |  |  |                                   m.sendChatMessage(userDetails["targetUser"].id, userDetails["targetUser"].userName, context); | 
		
	
		
			
				|  |  |  |  |                                 }, | 
		
	
		
			
				|  |  |  |  |                               ) | 
		
	
		
			
				|  |  |  |  |                             ], | 
		
	
		
			
				|  |  |  |  |                           ), | 
		
	
		
			
				|  |  |  |  |                         ), | 
		
	
		
			
				|  |  |  |  |                         ).paddingOnly(right: 20), | 
		
	
		
			
				|  |  |  |  |                       ), | 
		
	
		
			
				|  |  |  |  |                     ), | 
		
	
		
			
				|  |  |  |  |                   ], | 
		
	
	
		
			
				
					|  |  |  | 
 |